kako.dev

開発、自作アプリのこと

AndroidxでCannot resolve method 'setShiftingMode(Boolean)' in BottomNavigationView

最近、新規にAndroidプロジェクト開発する時はAndroidxにしています。そんなプロジェクト内でBottomNavigationViewを使う場合、デザインに合わせてアイテムのラベルを非表示にすることがあるのですが、かねてより使用していたsetShiftingModeがないためエラーになりました。(キャッチアップ不足です。。)

Google先生にきいてすぐ解決はしたんですが、setShiftingModeがあった頃のBottomNavigationViewのカスタマイズ方法を紹介している記事が多く、せっかくなのでまとめておきます。

Support Library 28 からなくなってた

support library 28.0.0-alpha1からsetShiftingModeがなくなって、代わりにxml上でapp:labelVisibilityModeというプロパティが追加されたようですね。

よって、support library 28.0.0-alpha1以降は(Androidxも)、以下のようにxmlに書けばBottomNavigationViewのラベルを非表示にすることができます。

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/bottom_navigation_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    app:menu="@menu/bottom_navigation_menu"
    app:labelVisibilityMode="unlabeled" />

app:labelVisibilityMode="unlabeled" とunlabeledを指定することで選択/非選択状態どちらでもラベルを非表示となります。 逆に選択しているアイテムだけ表示したい場合は、app:labelVisibilityMode="selected" 常に表示しておきたい場合は、app:labelVisibilityMode="labeled" とすればOKです。

xmlで指定できるようになり以前より簡単になったなと思うと同時に、 選択時にアイテムがアニメーションする挙動もxmlで指定できるようになったらいいのになーと思ってしまいますね。( ̄σー ̄)

参考

https://developer.android.com/reference/com/google/android/material/bottomnavigation/BottomNavigationView.html#setLabelVisibilityMode(int)

android - Cannot resolve method 'setShiftingMode(Boolean)' in BottomNavigationView - Stack Overflow