最新のサポートライブラリ '28.0.0-alpha1'にアップグレードした後、BottomNavigationView
すなわちBottomNavigationItemView.setShiftingMode()
でシフトモードを無効にできません。メソッドは使用できなくなりました。
Java.lang.NoSuchFieldException: No field mShiftingMode in class Landroid/support/design/internal/BottomNavigationMenuView;
W/System.err: at Java.lang.Class.getDeclaredField(Native Method)
at com.avocure.avocurehealth.utils.ViewUtils.removeNavigationShiftMode(ViewUtils.Java:44)
at com.avocure.avocurehealth.ui.main.MainActivity.init(MainActivity.Java:125)
at com.avocure.avocurehealth.ui.main.MainActivity.onCreate(MainActivity.Java:107)
at Android.app.Activity.performCreate(Activity.Java:6679)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1118)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2618)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2726)
at Android.app.ActivityThread.-wrap12(ActivityThread.Java)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1477)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:154)
at Android.app.ActivityThread.main(ActivityThread.Java:6119)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:886)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:776)
this メソッドを使用して、シフトモードを無効にします。
誰かが最新バージョンで何かが変わったのか、これがバグなのか何かに光を当てることができれば非常にありがたいです。
答えが見つかりました。サポートライブラリ28.0.0-alpha1では、次のいずれかの方法を使用してラベルを追加(シフトモードを削除)できるようになりました。
XML:
<Android.support.design.widget.BottomNavigationView
.
.
.
app:labelVisibilityMode="labeled" />
コード:
mBottomNavigationView.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED);
または:
@SuppressLint("RestrictedApi")
public static void removeNavigationShiftMode(BottomNavigationView view) {
BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
menuView.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED);
menuView.buildMenuView();
}