现在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>
但崩溃并且在执行此操作时会说颜色类型错误。我错过了什么?
答案 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问题,这对我有用