代码之家  ›  专栏  ›  技术社区  ›  dev90

如何从底部导航中删除标题

  •  0
  • dev90  · 技术社区  · 6 年前

    我调查了一下 stackoverflow 找到了如何从默认值中移除动画的解决方案。 bottom navigation.

    现在我需要从底部导航中删除标题。我在底部导航XML文件的标题中设置了空字符串,但它不会改变图像的位置。 我在用V27

    我需要把图像集中在 底部导航。 删除文本后。

    这是我的密码。

     //OnCreate 
    
            BottomNavigationViewHelper.removeShiftMode(bottomNavigationView);
    

    MainActivity内的静态类

    public static class BottomNavigationViewHelper {
        @SuppressLint("RestrictedApi")
        public static void removeShiftMode(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("BottomNav", "Unable to get shift mode field", e);
            } catch (IllegalAccessException e) {
                Log.e("BottomNav", "Unable to change value of shift mode", e);
            }
        }
    }
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   forpas    6 年前

    我使用以下代码的变体自定义 BottomNavigationView 基本上是文本视图:

    private void removeBottomNavigationLabels(BottomNavigationView bottomNavigationView) {
        for (int i = 0; i < bottomNavigationView.getChildCount(); i++) {
            View item = bottomNavigationView.getChildAt(i);
    
            if (item instanceof BottomNavigationMenuView) {
                BottomNavigationMenuView menu = (BottomNavigationMenuView) item;
    
                for (int j = 0; j < menu.getChildCount(); j++) {
                    View menuItem = menu.getChildAt(j);
    
                    View small = menuItem.findViewById(android.support.design.R.id.smallLabel);
                    if (small instanceof TextView) {
                        ((TextView) small).setVisibility(View.GONE);
                    }
                    View large = menuItem.findViewById(android.support.design.R.id.largeLabel);
                    if (large instanceof TextView) {
                        ((TextView) large).setVisibility(View.GONE);
                    }
                }
            }
        }
    
        BottomNavigationMenuView menuView = (BottomNavigationMenuView) bottomNavigationView.getChildAt(0);
        for (int i = 0; i < menuView.getChildCount(); i++) {
            final View iconView = menuView.getChildAt(i).findViewById(android.support.design.R.id.icon);
            iconView.setPadding(0, 40, 0, 0);
            ViewGroup.LayoutParams layoutParams = iconView.getLayoutParams();
            DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
            layoutParams.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 32, displayMetrics);
            layoutParams.width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 32, displayMetrics);
            iconView.setLayoutParams(layoutParams);
        }
    }
    

    你可以这样称呼它:

    removeBottomNavigationLabels(yourBottomNavigationView); 
    

    您也可以尝试类似地更改文本视图的可见性、填充或高度。

        2
  •  1
  •   tijn167    6 年前

    您可以尝试将app:labelVisibilityMode添加到“unlabelled”

     <android.support.design.widget.BottomNavigationView
            android:id="@+id/navigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:labelVisibilityMode="unlabeled"/>