Kotlin/ドロワーに再挑戦
前回、ScaffoldからdrawerContentを指定してドロワーを実装しようとしたら、今はその手が通じないと言われたのでした。マテリアル3(M3)への過渡期なんだそうです。いや、M2のことをちゃんと知らないので何とも言えないですが。
ModalNavigationDrawer
代わりにModalNavigationDrawerのdrawerContentを生やすとドロワーができるようです。子供にScaffoldを持たせればこれまで通りのものが作れそうです。
ModalNavigationDrawer(
drawerContent = {
ModalDrawerSheet {
Text(stringResource(R.string.app_name), modifier = Modifier.padding(16.dp))
HorizontalDivider()
NavigationDrawerItem(
label = { Text(text = stringResource(R.string.option_a)) },
selected = false,
onClick = {}
)
}
}
) {
Scaffold() { //... }
}
ここでいうdrawerContent的なものをスロットって呼ぶんですね~。Composableな部品を作る関数の引数みたいな丸括弧の中で属性のように定義できるのがスロットなのかな。そして、波括弧の中身が子要素って感じですかね。HTMLの作る構造に似ていて、WEBサイトをよく作る私なんかにはとっつきやすいように感じます。
とりあえず見本に倣って、テキストと横境界線(HorizontalDivider)、そしてNavigationDrawerItemという子要素を持つModalDrawerSheetをdrawerContent に生やしてみました。ModalDrawerSheetは何でしょうね~。引き出しの中の敷物って感じですかね。ドロワーの形状とか色を指定できそうです。NavigationDrawerItemは引き出しの中身で、クリックしたり、選択したり、名前を書いておいたりできそうです。引き出しが道具箱って感じにできそう。
NavigationDrawerItem
NavigationDrawerItemをもうちょっと深掘りしてみます。といっても、labelにTextを配置して、クリック時の挙動を書くくらいしか・・・あっ、アイコンがつけられそうですね。前のXMLのレイアウトでもiconのプロパティがありました。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/hoge"
android:icon="@drawable/ic_hoge
android:title="@string/title_hoge" />
...
</group>
</menu>
これがComposable関数になると以下のようになりました。
NavigationDrawerItem(
label = { Text(text = stringResource(R.string.title_hoge)) },
selected = false,
icon = { Icon(painterResource(R.drawable.ic_hoge), contentDescription = null)},
onClick = {
...
}
)
それで、クリックされたときの挙動(onClick)を書こうとしてまた手が止まります。Intentを呼ぶようなシンプルなものなんですが、private変数にアクセスできない・・・あっ、AndroidStudioのテンプレートにあったGreeting関数を真似して書いてたんですが、この関数はActivityクラスの外側に書いてあるのか。じゃ、classの中にComposableな関数を入れちゃえばいいだけか・・・。でもなんで、Greeting関数は中に入ってなかったんでしょう?これはもしかして、Composable関数が部品のように他の画面からも呼び出されることが想定されて、あえて外に出されてるんじゃないか、って私は考えました。疎結合みたいな単語、Java屋さん好きじゃないですか。ってことは、外に置いたままでもうまくやる方法があるんじゃないかと予想されます。
次々と知らないことが湧いてきて、その都度調べ物が必要になり、全然実装が進みませんね。
- Kotlin/NavControllerで遷移ドロワーを持つレイアウトを作ろうと思ったけど、現在のScaffoldだけではできなくなってて、ModalNavigationDrawerで囲ってやればよかったんâ¦
- Kotlin/Composableに移行する2前回 、やっとのことでレイアウトXMLをsetContentViewで読み込む方式から脱却し、setContentで@Composableなレイアウト部品を読みâ¦
Kotlin/ViewModelによる状態管理既存のXMLによる画面レイアウトをComposableな関数による画面レイアウトに書き換えてみう試みは先日、うまくいって終わったんですが、微妙に消化不良なことがâ¦- Kotlin/ダイアログを出すもう、元からあったボタンを押したときの処理みたいなのを新しいComposableなボタンに関連付けていけば作業も終わりなのかな、って思ってましたが、まだまだやるâ¦
- Kotlin/FloatingActionButtonも設置するComposableに移管中の画面には FloatingActionButton もついてました。Scaffoldに丁度、floatingActionButtoâ¦
- Kotlin/ViewModelによる状態管理その2前回、データ(状態、ステート)を持っちゃっていたカスタムViewをComposable向けに書きなおすところまで進みました。いろんな話がでてきて頭の整理がおいつâ¦
- Kotlin/Composableで構成では、画面に必要な要件を挙げていって、実際にComposableな要素を詰め込んでいってみましょう。今回作るのは簡素なファイラーです。とりあえず、ファイルを一覧â¦
- Kotlin/さらばRecyclerViewさて、RecyclerViewへの愚痴を始めましょうか。RecyclerViewは同じようなViewを大量に並べるのによく使ってました。俗にいう 一覧画面 なんâ¦
- Kotlin/足場(Scaffold)を固めてみる実際に既存のアプリに機能を追加してみよう、と漠然と新しいActivityを用意してみました。このアプリの中ではこのActivityだけComposableな画面â¦
- Kotlin/Composableに移行する先日、Android15が配信され、それに伴ってEdge-to-Edgeなる新しめな施策が強制オンとなって、アプリにちょっと手を入れていたのですが、どうも旧来のâ¦