1

我在我的项目中使用 Appcompat 7 作为带有导航切换的工具栏。除了需要在每个活动或片段更改时动态更改DrawerArrowToggle图标的颜色外,一切正常。

我的styles.xml文件代码如下:

<style name="NavigationTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">#FFFFF</item>
        <item name="colorPrimaryDark">#F2F2F2</item>
        <item name="android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>


<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
        <item name="spinBars">false</item>
        <item name="color">#FFFFFF</item>
    </style>


在上述样式文件中,我使用DrawerArrowToggle颜色为White,但我的要求是在运行时更改为其他颜色。我没有发布任何代码,因为我完全被卡住了,我什至找不到一条代码来满足我的要求。

4

1 回答 1

3

我不确定这是否可行,我还没有测试过自己。

首先获取导航图标的视图引用

 public static View getToolbarNavigationIcon(Toolbar toolbar){
        //check if contentDescription previously was set
        boolean hadContentDescription = TextUtils.isEmpty(toolbar.getNavigationContentDescription());
        String contentDescription = !hadContentDescription ? toolbar.getNavigationContentDescription() : "navigationIcon";
        toolbar.setNavigationContentDescription(contentDescription);
        ArrayList<View> potentialViews = new ArrayList<View>();
        //find the view based on it's content description, set programatically or with android:contentDescription
        toolbar.findViewsWithText(potentialViews,contentDescription, View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);
        //Nav icon is always instantiated at this point because calling setNavigationContentDescription ensures its existence 
        View navIcon = null;
        if(potentialViews.size() > 0){
            navIcon = potentialViews.get(0); //navigation icon is ImageButton
        }
         //Clear content description if not previously present
        if(hadContentDescription)
            toolbar.setNavigationContentDescription(null);
        return navIcon;
     }

在这种情况下,一旦您将视图引用应用于ColorFilter可绘制对象,ActionBarDrawerToggle 图标:

View navigationIcon = getToolbarNavigationIcon(mToolbar);
Drawable navDrawable = navigationIcon.getDrawable();
if(navDrawable != null){
   navDrawable.setColorFilter(newColor, PorterDuff.Mode.MULTIPLY);
}
于 2015-03-31T13:48:04.443 回答