[Android,Kotlin]BottomNavigationViewのsetShiftingModeがない

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' 以降で問題が発生するようです。

コメント

タイトルとURLをコピーしました