Android 更改底部导航视图';s图标大小

Android 更改底部导航视图';s图标大小,android,bottomnavigationview,Android,Bottomnavigationview,我一直在试用新的BottomNavigationView,并尝试对其进行定制 到目前为止,我已通过以下方法更改了高度和边距: <dimen name="design_bottom_navigation_height" tools:override="true">75dp</dimen> <dimen name="design_bottom_navigation_margin" tools:override="true">5dp</dimen> 7

我一直在试用新的BottomNavigationView,并尝试对其进行定制

到目前为止,我已通过以下方法更改了高度和边距:

<dimen name="design_bottom_navigation_height" tools:override="true">75dp</dimen>
<dimen name="design_bottom_navigation_margin" tools:override="true">5dp</dimen>
75dp
5dp
我想增加图标的大小

如何做到这一点


编译版本:com.android.support:design:25.0.1

图标大小在项目布局中硬编码为24dp(请参阅),可以通过编程方式更改:

BottomNavigationView bottomNavigationView = (BottomNavigationView) configurationActivity.findViewById(R.id.bottom_navigation_view);
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);
    final ViewGroup.LayoutParams layoutParams = iconView.getLayoutParams();
    final 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);
}
BottomNavigationView BottomNavigationView=(BottomNavigationView)配置活动.findViewById(R.id.bottom\u navigation\u视图);
BottomNavigationMenuView menuView=(BottomNavigationMenuView)bottomNavigationView.getChildAt(0);
对于(int i=0;i
晚但最新

使用
implementation'com.android.support:design:28.0.0'
design-support库

有一个属性可更改图标大小:

<android.support.design.widget.BottomNavigationView
    app:itemIconSize="@dimen/_26sdp">
    ....
    ....
</android.support.design.widget.BottomNavigationView>
更新: 如果您使用的是材质库,则它将是相同的。只需更改包名,如下所示

implementation 'com.google.android.material:material:1.1.0'
XML:

dashboardNavigation.setItemIconSize(24);
<com.google.android.material.bottomnavigation.BottomNavigationView
                app:itemIconSize="@dimen/_26sdp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

编程方式-同上


谢谢。

对于androidx使用此id作为图标
andcom.google.android.material.R.id.icon

完整代码:

BottomNavigationView bottomNavigationView = (BottomNavigationView) configurationActivity.findViewById(R.id.bottom_navigation_view);
BottomNavigationMenuView menuView = (BottomNavigationMenuView) bottomNavigationView.getChildAt(0);
for (int i = 0; i < menuView.getChildCount(); i++) {
    final View iconView = menuView.getChildAt(i).findViewById(com.google.android.material.R.id.icon);
    final ViewGroup.LayoutParams layoutParams = iconView.getLayoutParams();
    final 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);
}
BottomNavigationView BottomNavigationView=(BottomNavigationView)配置活动.findViewById(R.id.bottom\u navigation\u视图);
BottomNavigationMenuView menuView=(BottomNavigationMenuView)bottomNavigationView.getChildAt(0);
对于(int i=0;i
这对我使用AndroidX非常有效 您的XML布局

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/nav_view"
    style="@style/DA_Bottom_Nav"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="0dp"
    android:layout_marginEnd="0dp"
    app:itemIconSize="50dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:menu="@menu/nav_menu"/>

Res/values/dimens.xml

<resources xmlns:tools="http://schemas.android.com/tools">
    <dimen name="design_bottom_navigation_height" tools:override="true">80dp</dimen>
</resources>

80dp

如果您想更改
底部导航视图的图标大小,这里有一个简单快捷的解决方案

比方说,您的
BottomNavigationView
上有5个项目,您想更改中间图标的大小:

BottomNavigationMenuView menuView = (BottomNavigationMenuView)
            mainBinding.bottomNavView.getChildAt(0);
// Here the index: 2 at 'getChildAt(2)' means the middle icon
BottomNavigationItemView navigationItemView = (BottomNavigationItemView) menuView.getChildAt(2);

final DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
            
navigationItemView.setIconSize((int)
            TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40,
                    displayMetrics));

现在您已将其更改;)

我不敢相信他们硬编码的大小,没有使用样式属性来设置值,这可以为开发人员带来更多的灵活性…我爱你,兄弟,你救了我一天!如何在kotlin上获取bottomNavigationView,因为我在:val bottomNavigationView=bottom\u navigation\u View上获取NPE为什么需要调用bottomNavigationView.getChildAt(0)?或者BottomNavigationView和BottomNavigationMenuView之间有什么区别?androidx包的资源名称是什么?如果可以通过编程方式更改它,请参见?如何更改BottomNavigationView中的文本大小。谢谢