有什么方法可以将代码中新设计库BottomNavigationView的背景色设置为自定义颜色值,而不是颜色资源?可能有“技巧”吗?

我当前的解决方案:


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


但这看起来很难看,特别是因为我必须使用自定义行为才能使背景视图与父级BottomNavigationView中的CoordinatorLayout并行进行动画处理...

最佳答案

我自己解决了。

解决方案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();
    }
}

关于android - 设计BottomNavigationView-在代码中设置背景颜色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40280536/

10-10 09:44