BottomNavigationViewで、常にタブのTextを表示しようとした場合、以下のような実装でいけるような情報があったのですが、うまく行きませんでした。
おそらくライブラリのバージョンの関係だと思うのですが、細かく追っていません。
関連ライブラリ:
com.google.android.material:material:1.0.0
うまくいかなかった実装例
val menuView = bottomNavigation.getChildAt(0) as BottomNavigationMenuView
for (i in 0 until menuView.childCount) {
val itemView = menuView.getChildAt(i) as BottomNavigationItemView
itemView.setShiftingMode(false)
itemView.setChecked(false)
}
エラー、ワーニング概要
setShiftingMode のメソッドがないというエラー
Unresolved reference: setShiftingMode
→クラス内を確認しても、setShiftingModeは確かに存在していませんでした。
似たようなメソッドとして、setShiftingメソッドがありましたが、こちらを使うと以下のsetCheckedと同じようなワーニングが表示されます。
確認したクラスcom/google/android/material/bottomnavigation/BottomNavigationItemView.class
setChecked のメソッドが同じライブラリグループからしか呼べないというワーニング
※ActivityのonCreate内で呼んでいました。BottomNavigationItemView.setChecked can only be called from within the same library group (groupId=com.google.android.material) less... (⌘F1) Inspection info:This API has been flagged with a restriction that has not been met. Examples of API restrictions: * Method can only be invoked by a subclass * Method can only be accessed from within the same library (defined by the Gradle library group id) * Method can only be accessed from tests. You can add your own API restrictions with the @RestrictTo annotation. Issue id: RestrictedApi
なお、このワーニングを無視しても起動しましたが、初回だけ設定が有効になっているような振る舞いが見られました。
対策
kotlinコードで行う必要がなかったです。
xmlファイルで[app:labelVisibilityMode="labeled"
]を追加する。
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:labelVisibilityMode="labeled"
app:menu="@menu/my_navigation_items" />
参考
Cannot resolve method ‘setShiftingMode(Boolean)’ in BottomNavigationView
support library '28.0.0-alpha1'
以降で問題が発生するようです。
コメント