[解決済み] BottomNavigationViewのシフトモードを無効にする方法は?
質問
BottomNavigationViewは、非アクティブなメニューのタイトルを表示しません。
bottomNavigationBarにすべてのメニュー要素のタイトルを表示するには? 問題は、私の場合、クリックされた要素のタイトルだけが表示されることです。
解決方法は?
の実装
BottomNavigationView
は、項目が3つ以上の場合、シフトモードを使用するという条件があります。
現時点では既存のAPIで変更することはできず、シフトモードを無効にするためにはリフレクションを使うしかありません。
ヘルパークラスが必要です。
import android.support.design.internal.BottomNavigationItemView;
import android.support.design.internal.BottomNavigationMenuView;
import android.support.design.widget.BottomNavigationView;
import android.util.Log;
import java.lang.reflect.Field;
public class BottomNavigationViewHelper {
public static void disableShiftMode(BottomNavigationView view) {
BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
try {
Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode");
shiftingMode.setAccessible(true);
shiftingMode.setBoolean(menuView, false);
shiftingMode.setAccessible(false);
for (int i = 0; i < menuView.getChildCount(); i++) {
BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
//noinspection RestrictedApi
item.setShiftingMode(false);
// set once again checked value, so view will be updated
//noinspection RestrictedApi
item.setChecked(item.getItemData().isChecked());
}
} catch (NoSuchFieldException e) {
Log.e("BNVHelper", "Unable to get shift mode field", e);
} catch (IllegalAccessException e) {
Log.e("BNVHelper", "Unable to change value of shift mode", e);
}
}
}
そして
disableShiftMode
メソッドを
BottomNavigationView
ただし、メニュービューを自分のコードで展開する場合は、展開した後に実行する必要があることを忘れないでください。
使用例です。
BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation_bar);
BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
PS.
のメニュー項目を変更するたびに、このメソッドを実行する必要があることを覚えておいてください。
BottomNavigationView
.
アップデイト
また、proguardの設定ファイル(例:proguard-rules.pro)を更新する必要があります。上記のコードはリフレクションを使用しているため、proguardが
mShiftingMode
フィールドがあります。
-keepclassmembers class android.support.design.internal.BottomNavigationMenuView {
boolean mShiftingMode;
}
Muhammad Alfaifi さん、ご指摘ありがとうございます。 この問題 と スニペットの提供 .
アップデイト2
Jolanda Verhoefが指摘したように、新しいSupportライブラリ(
28.0.0-alpha1
) と、新しい
マテリアルコンポーネントライブラリ
(
1.0.0-beta01
) は、3つのメニュー項目のシフトモードを操作するために使用することができるパブリックプロパティを提供しています。
<com.google.android.material.bottomnavigation.BottomNavigationView
...
app:labelVisibilityMode="labeled"
...
/>
Material Components ライブラリでは、メニュー項目が5つある場合にも適用されます。
アップデイト3
ThomasSunderland も指摘しているように、このプロパティを false に設定することができます。
app:itemHorizontalTranslation="false"
なく
Enabled
を追加することで、変速アニメーションを無効にすることができます。
BottomNavigation のスタイリングに関する完全なガイドを参照してください。 こちら
関連
-
[解決済み] TextViewでテキストを水平・垂直方向にセンタリングするには?
-
アンドロイドプロジェクトのパッケージングにgradleを使用する際の問題点
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] アプリケーションを終了することは嫌われますか?
-
[解決済み] AndroidでstartActivityForResultを管理する方法
-
[解決済み] Androidのランドスケープモードを無効にする方法を教えてください。
-
[解決済み] フラグメントのインスタンス状態をバックスタックに正しく保存する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
java.lang.NullPointerException: NULLオブジェクト参照で仮想メソッド......を呼び出そうとしました。
-
gitlab 設定エラー。リモートリポジトリから読み込めなかったか、ホストキーの検証に失敗しました。
-
エラーが発生しました。ArrayAdapter は、リソース ID が TextView である必要があります。
-
android block certificate validation CertPathValidatorException: 認証パスのトラストアンカーが見つかりません
-
Error:A problem occurred configuring project ':app'. > ビルドを見つけられませんでした。
-
Android Nで報告されたエラーを解決する: android.os.FileUriExposedException: file:///storage/emulated/0/
-
Windowsのadbシェルでデータディレクトリにアクセスするとパーミッションが拒否される
-
アンドロイドスタジオソフトウェア使用詳細説明書
-
[解決済み] BottomNavigationViewは、アイコンとテキストラベルの両方を常時表示する。
-
[解決済み] アンドロイドの新しいボトムナビゲーションバー、BottomNavigationView