98

Google は、BottomNavigationView を備えた新しいサポート ライブラリ v25 をリリースしました

ここに画像の説明を入力

アイテムのラベルを削除する方法はありますか?

4

8 に答える 8

246

ここでのパーティーに遅すぎないことを願っています。

ただし、Design Support Library 28.0.0-alpha1 の時点で、プロパティを使用できます

app:labelVisibilityMode="unlabeled"

ラベルのない BottomNavigationView

他の値「auto」、「labeled」、「selected」も使用できます。

于 2018-07-28T19:43:04.193 に答える
18

残念ながら、BottomNavigationView のこの最初のバージョンには多くの制限がありました。現時点では、サポート デザイン API だけを使用してタイトルを削除することはできません。したがって、Googleが実装していない間にこの制限を解決するには、(リフレクションを使用して)行うことができます:

1. bottom_navigation_menu.xml ファイルからタイトルを空に設定します。

2. BottomNavigationView を拡張します。

    public class MyBottomNavigationView extends BottomNavigationView {

      public MyBottomNavigationView(Context context, AttributeSet attrs) {
          super(context, attrs);
          centerMenuIcon();
      }

      private void centerMenuIcon() {
          BottomNavigationMenuView menuView = getBottomMenuView();

          if (menuView != null) {
              for (int i = 0; i < menuView.getChildCount(); i++) {
                BottomNavigationItemView menuItemView = (BottomNavigationItemView) menuView.getChildAt(i);

                AppCompatImageView icon = (AppCompatImageView) menuItemView.getChildAt(0);

                FrameLayout.LayoutParams params = (LayoutParams) icon.getLayoutParams();
                params.gravity = Gravity.CENTER;

                menuItemView.setShiftingMode(true);
              }
          }
      }

      private BottomNavigationMenuView getBottomMenuView() {
          Object menuView = null;
          try {
              Field field = BottomNavigationView.class.getDeclaredField("mMenuView");
              field.setAccessible(true);
              menuView = field.get(this);
          } catch (NoSuchFieldException | IllegalAccessException e) {
              e.printStackTrace();
          }

          return (BottomNavigationMenuView) menuView;
      }
    }

3. この customView を layout.xml に追加します。

詳細については、Githubでこれを実装しました

于 2016-10-22T05:49:52.973 に答える
12

1.menu/abc.xmlandroid:title="";に設定_

2.リフレクションを使用する以下のヘルパー クラスを作成します。

import android.support.design.internal.BottomNavigationMenuView;
import android.support.design.widget.BottomNavigationView;
import android.support.v7.widget.AppCompatImageView;
import android.util.Log;
import android.view.Gravity;
import android.widget.FrameLayout;

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);
                item.setPadding(0, 15, 0, 0);
                // 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);
        }
    }
} 

3.メイン アクティビティに、次の行を追加します。

mBottomNav = (BottomNavigationView) findViewById(R.id.navigation);
BottomNavigationViewHelper.disableShiftMode(mBottomNav);
于 2017-11-29T07:14:49.670 に答える