Androidアプリ開発でもう少し簡潔に書けないかなーと探していたらAnkoというのを知って色々試しててsnackbar使おうとしたらハマった話です.
結論
anko-designなるものが必要でした.
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation "org.jetbrains.anko:anko:$anko_version" //←これだけじゃ足りない
implementation "org.jetbrains.anko:anko-design:$anko_version" //←これも必要
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
What's Anko?
JetBrainsが手掛けてるAndroidアプリケーションの開発を迅速かつ容易にするKotlin純正ライブラリで, コードを簡潔に保ち可読性を上げられるとのこと.
Ankoは4つのパートに分かれています.
- Anko-Commons
- Anko-Layouts
- Anko-SQLite
- Anko-Coroutines
公式を見る限り, snackbarはAnko-Commonsに入っている...ように見えます.
What's Anko Commons?
IntentとかDialogとかLoggingのヘルパー関数が色々入ってるツールボックスみたいなものです.
snackbarだと
view.snackbar("I love Kotlin!")
こう書けます.
シンプルでいいですね.
なんでハマったの?
結論としてはWikiをちゃんと見てなかったからです.
READMEにはこう書いてあります.
Anko has a meta-dependency which plugs in all available features (including Commons, Layouts, SQLite) into your project at once.
このmeta-dependencyに該当する記述がこれ
implementation "org.jetbrains.anko:anko:$anko_version"
「これを入れれば全部の機能が使えるんだなー」と思ったんですが, snackbarが使えない.
全部じゃないじゃんと思いながら再度くまなく見て回ると, Wikiに以下の記述が.
compile "org.jetbrains.anko:anko-design:$anko_version" // For SnackBars
snackbarを使うときはanko-designも追加で必要.
compileをimplementationに変えて、gradleに入れたら無事snackbarできました.