如何从Android appcompat v7 21库设置DrawerArrowToggle的样式

时间:2014-10-18 12:09:12

标签: android android-5.0-lollipop

现在Android 5.0已经发布了,我想知道如何设置动画操作栏图标的样式。

这个库here为我实现并设计好样式但是因为appcompat v7库有它,它怎么样呢?

我使用v7 DrawerToggle实现了这个功能。但是我无法设计它。请帮忙

我在v7 styles_base.xml

中找到了它的样式
    <style name="Base.Widget.AppCompat.DrawerArrowToggle" parent="">
    <item name="color">?android:attr/textColorSecondary</item>
    <item name="thickness">2dp</item>
    <item name="barSize">18dp</item>
    <item name="gapBetweenBars">3dp</item>
    <item name="topBottomBarArrowSize">11.31dp</item>
    <item name="middleBarArrowSize">16dp</item>
    <item name="drawableSize">24dp</item>
    <item name="spinBars">true</item>
</style>

我将此添加到我的样式中并且无效。也添加到我的attr.xml

<declare-styleable name="DrawerArrowToggle">
    <!-- The drawing color for the bars -->
    <attr name="color" format="color"/>
    <!-- Whether bars should rotate or not during transition -->
    <attr name="spinBars" format="boolean"/>
    <!-- The total size of the drawable -->
    <attr name="drawableSize" format="dimension"/>
    <!-- The max gap between the bars when they are parallel to each other -->
    <attr name="gapBetweenBars" format="dimension"/>
    <!-- The size of the top and bottom bars when they merge to the middle bar to form an arrow -->
    <attr name="topBottomBarArrowSize" format="dimension"/>
    <!-- The size of the middle bar when top and bottom bars merge into middle bar to form an arrow -->
    <attr name="middleBarArrowSize" format="dimension"/>
    <!-- The size of the bars when they are parallel to each other -->
    <attr name="barSize" format="dimension"/>
    <!-- The thickness (stroke size) for the bar paint -->
    <attr name="thickness" format="dimension"/>
</declare-styleable>

但崩溃并且在执行此操作时会说颜色类型错误。我错过了什么?

7 个答案:

答案 0 :(得分:96)

以下适用于我:

<style name="MyTheme" parent="Theme.AppCompat">
   <item name="drawerArrowStyle">@style/MyDrawerArrowToggle</item>
</style>

<style name="MyDrawerArrowToggle" parent="Widget.AppCompat.DrawerArrowToggle">
  <item name="color">@color/your_color</item>
</style>

答案 1 :(得分:24)

在我的情况下,我想改变抽屉箭头和汉堡图标的颜色。 设置抽屉箭头样式只改变了汉堡图标颜色。

所以我在appcompat-v7的Widget.AppCompat.DrawerArrowToggle中打开了values.xml样式。

<style name="Widget.AppCompat.DrawerArrowToggle" parent="Base.Widget.AppCompat.DrawerArrowToggle">
    <item name="color">?attr/colorControlNormal</item>
</style>

所以我创建了一个特殊的主题:

<style name="Toolbar_Theme">
    <item name="colorControlNormal">@android:color/black</item>
</style>

并将其应用到我的工具栏中,如下所示:

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    app:theme="@style/Toolbar_Theme" />

请注意,我正在使用theme attribute而不是在我的应用主题中定义controlColorNormal。这样颜色只适用于工具栏项目,如果我在app主题中设置它,那么它也会影响滚动条颜色等。

设置colorControlNormal属性会更改汉堡包和抽屉箭头的颜色。

答案 2 :(得分:3)

对于那些最终在这里(像我一样)寻找使用v7 ActionBarDrawerToggle用自己的drawable(非动画)替换抽屉指示器图标的方法,您可以执行以下操作:

//After instantiating your ActionBarDrawerToggle
mDrawerToggle.setDrawerIndicatorEnabled(false);
Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.your_custom_icon, getActivity().getTheme());
mDrawerToggle.setHomeAsUpIndicator(drawable);
mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (mDrawerLayout.isDrawerVisible(GravityCompat.START)) {
            mDrawerLayout.closeDrawer(GravityCompat.START);
        } else {
            mDrawerLayout.openDrawer(GravityCompat.START);
        }
    }
});

答案 3 :(得分:0)

对于我的情况,操作栏的主题与在白色和黑色汉堡包图标之间切换相关:

<item name="actionBarWidgetTheme">@style/Theme.AppCompat</item>

VS

<item name="actionBarWidgetTheme">@style/Theme.AppCompat.Light</item>

答案 4 :(得分:0)

我想让hamburguer / arrow白色,但所有这些“风格”的东西都不适用于我。 我删除了所有并添加此行只是解决它,作为布局中“android.support.v7.widget.Toolbar”元素的属性

  

机器人:主题=“@风格/ ThemeOverlay.AppCompat.Dark.ActionBar

答案 5 :(得分:-1)

您的样式名称没有父级 这里使用的是android 5和Material Theme,无需用appCompat替换actionbar 这是我的风格,我只需要将颜色改为白色,因为我有一个彩色条

     <style name="myTheme.DrawerArrowToggle" parent="Base.Widget.AppCompat.DrawerArrowToggle">
    <item name="color">@color/white</item>
</style>

这是我的主题

<style name="Theme_AppTheme.Light" parent="@android:style/Theme.Material.Light">

     <!-- Drawer\arrow in white -->
     <item name="drawerArrowStyle">@style/myTheme.DrawerArrowToggle</item>

PS。这只是一个问题,在adroid 4.4和普通的动作栏上表现不佳。 不幸的是,来自v7的nre drawerToggle不会继承自v4

答案 6 :(得分:-1)

不确定确切的错误是什么,如果你已经定义了颜色,请到attrs.xml搜索attr name =&#34; color&#34;你可能需要将自定义attr更改为其他名称,不确定这是一个支持lib问题,这对我有用