设计BottomNavigationView - 在代码

时间:2016-10-27 09:06:52

标签: android android-support-library bottomnavigationview

有没有办法将代码中新设计库BottomNavigationView的背景颜色设置为自定义颜色值而不是颜色资源?任何“技巧”可能吗?

我目前的解决方案:

  • 我使BottomNavigationView透明
  • 我在bottomNavigationView
  • 后面添加了第二个视图
  • 我更新了此视图的背景

但这看起来很丑陋,尤其是因为我必须使用自定义行为让背景视图与父BottomNavigationView中的CoordinatorLayout并行设置动画...

2 个答案:

答案 0 :(得分:5)

自己解决了。

解决方案1 ​​

我只是设置了透明背景的所有项目(这只需要一个资源文件),然后我将BottomNavigationView实际背景本身设为主题。

bottomBar.setBackground(new ColorDrawable(color));
bottomBar.setItemBackgroundResource(R.drawable.transparent);

资源drawable - 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();
    }
}

答案 1 :(得分:0)

经过多次搜索,只有这样才能解决我的情况:

Widget

在这里我设置了每个背景项目。