设计 BottomNavigationView - 在代码中设置背景颜色
Design BottomNavigationView - set background color in code
有什么方法可以在代码中将新设计库 BottomNavigationView
的背景颜色设置为自定义颜色值而不是颜色资源?可能有 "trick" 吗?
我目前的解决方案:
- 我让
BottomNavigationView
透明
- 我在
bottomNavigationView
后面添加了第二个视图
- 我更新了这个视图的背景
但这看起来很难看,尤其是当我必须使用自定义行为使背景视图与父 CoordinatorLayout
中的 BottomNavigationView
并行动画时...
自己解决了。
解决方案 1
我只是将所有项目设置为透明背景(这只需要一个资源文件),然后我将 BottomNavigationView
实际背景本身设置为主题。
bottomBar.setBackground(new ColorDrawable(color));
bottomBar.setItemBackgroundResource(R.drawable.transparent);
可绘制资源 - transparent.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
解决方案 2 - 通过反射(支持库 25.0.0)
public void themeBottomBarBackgroundWithReflection(BottomNavigationView bottomBar, int color)
{
try
{
Field mMenuViewField = BottomNavigationView.class.getDeclaredField("mMenuView");
mMenuViewField.setAccessible(true);
BottomNavigationMenuView mMenuView = (BottomNavigationMenuView)mMenuViewField.get(bottomBar);
Field mButtonsField = BottomNavigationMenuView.class.getDeclaredField("mButtons");
mButtonsField.setAccessible(true);
BottomNavigationItemView[] mButtons = (BottomNavigationItemView[])mButtonsField.get(mMenuView);
for (BottomNavigationItemView item : mButtons) {
ViewCompat.setBackground(item, new ColorDrawable(color));
}
}
catch (NoSuchFieldException e)
{
e.printStackTrace();
}
catch (IllegalAccessException e)
{
e.printStackTrace();
}
}
经过多次搜索,只有这个解决了我的问题:
bottomNavigationView.setItemBackground(new ColorDrawable(color));
这里我设置了每一个背景项。
有什么方法可以在代码中将新设计库 BottomNavigationView
的背景颜色设置为自定义颜色值而不是颜色资源?可能有 "trick" 吗?
我目前的解决方案:
- 我让
BottomNavigationView
透明 - 我在
bottomNavigationView
后面添加了第二个视图
- 我更新了这个视图的背景
但这看起来很难看,尤其是当我必须使用自定义行为使背景视图与父 CoordinatorLayout
中的 BottomNavigationView
并行动画时...
自己解决了。
解决方案 1
我只是将所有项目设置为透明背景(这只需要一个资源文件),然后我将 BottomNavigationView
实际背景本身设置为主题。
bottomBar.setBackground(new ColorDrawable(color));
bottomBar.setItemBackgroundResource(R.drawable.transparent);
可绘制资源 - transparent.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
解决方案 2 - 通过反射(支持库 25.0.0)
public void themeBottomBarBackgroundWithReflection(BottomNavigationView bottomBar, int color)
{
try
{
Field mMenuViewField = BottomNavigationView.class.getDeclaredField("mMenuView");
mMenuViewField.setAccessible(true);
BottomNavigationMenuView mMenuView = (BottomNavigationMenuView)mMenuViewField.get(bottomBar);
Field mButtonsField = BottomNavigationMenuView.class.getDeclaredField("mButtons");
mButtonsField.setAccessible(true);
BottomNavigationItemView[] mButtons = (BottomNavigationItemView[])mButtonsField.get(mMenuView);
for (BottomNavigationItemView item : mButtons) {
ViewCompat.setBackground(item, new ColorDrawable(color));
}
}
catch (NoSuchFieldException e)
{
e.printStackTrace();
}
catch (IllegalAccessException e)
{
e.printStackTrace();
}
}
经过多次搜索,只有这个解决了我的问题:
bottomNavigationView.setItemBackground(new ColorDrawable(color));
这里我设置了每一个背景项。