删除 BottomNavigationView 图标和中心标题

Posted

技术标签:

【中文标题】删除 BottomNavigationView 图标和中心标题【英文标题】:Remove BottomNavigationView Icons and center title 【发布时间】:2020-04-18 16:13:19 【问题描述】:

我有一个包含 3 个项目的底部导航视图。我只想为每个选项卡设置居中文本,因此希望完全删除图标(不仅使它们透明)。

如何删除图标并使标题居中?

这就是我所拥有的: 这就是我要的:

我的代码:(首选 XML 解决方案)

<merge  xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">

    <RelativeLayout
        android:layout_
        android:layout_
        android:layout_alignParentBottom="true">

        <com.google.android.material.bottomnavigation.BottomNavigationView
            android:layout_
            android:layout_
            android:id="@+id/navigationBar"
            android:background="@color/navigation"
            app:theme="@style/BottomNavigationTheme"
            app:menu="@menu/bottom_navigation_menu"
            android:minHeight="@dimen/abc_action_bar_default_height_material">

        </com.google.android.material.bottomnavigation.BottomNavigationView>

    </RelativeLayout>

</merge>

bottom_navigation_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu   xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/ic_home"
        android:title="@string/home">
    </item>

    <item
        android:id="@+id/ic_today"
        android:title="@string/today">
    </item>

    <item
        android:id="@+id/ic_you"
        android:title="@string/you">
    </item>

</menu>

【问题讨论】:

【参考方案1】:

为您的底部工作表添加固定高度并设置底部填充。对我有用。

   android:layout_
   android:paddingBottom="20dp"
   android:clipToPadding="false"

【讨论】:

【参考方案2】:

最简单的方法就是使用

android:paddingBottom="16dp" //(any dp you want)
android:clipToPadding="false"

【讨论】:

【参考方案3】:

这对我有用

private int baselineHeight = 0;

private void removeIcons(BottomNavigationView view) 
    BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
    for (int i = 0; i < menuView.getChildCount(); i++) 
        BottomNavigationItemView itemView = (BottomNavigationItemView) (menuView.getChildAt(i));
        BaselineLayout baseline = (BaselineLayout) itemView.getChildAt(1);
        FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) baseline.getLayoutParams();
        baselineHeight = baselineHeight > 0 ? baselineHeight : (menuView.getHeight() + baseline.getHeight()) / 2;
        layoutParams.height = baselineHeight;
        baseline.setLayoutParams(layoutParams);
    

只需在您的 Activity 中的 onCreate() 中调用它,并将您的 BottomNavigationView 作为参数传递。

如果您不想让过多的代码使您的活动或片段混乱,并且您希望在您的 layout XML 中出现这种情况,您可以创建一个 自定义视图 >扩展BottomNavigationView并在onLayout() override中调用此函数。

【讨论】:

【参考方案4】:

您可以使用底部导航视图的此属性来隐藏文本,它会自动将您的图标居中,我认为您不使用 minHeight 属性先生。 app:labelVisibilityMode="unlabeled"

【讨论】:

感谢您的回答,但是我认为您已经错过了理解,我试图隐藏图标并使文本居中。不是反过来。您的解决方案删除了​​我试图保留的文本

以上是关于删除 BottomNavigationView 图标和中心标题的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用 BottomNavigationView 移位模式?

BottomNavigationView 滞后于片段事务

Android BottomNavigationView 底部导航组件使用

Android Notes|BottomNavigationView 爱上 Lottie

Android Notes|BottomNavigationView 爱上 Lottie

BottomNavigationView - 如何获取选定的菜单项?