如何在展开searchView时自定义“向上”按钮?

时间:2014-12-07 22:12:05

标签: android android-5.0-lollipop searchview up-button

背景

My app能够使用ActionBar上的SearchView搜索项目(其他应用程序)。

该应用程序使用Google的支持库,它适用于API 9的所有Android版本。

问题

在Lollipop上,当我点击搜索操作项以开始搜索时,我注意到左上角的向上/向后按钮变为白色,这对于这种情况是不好的,因为操作栏背景也是很白:

enter image description here

奇怪的是,它并不总是发生,而且我认为它不会发生在不是棒棒糖的Android版本上(在多个模拟器和设备上测试过)。

另一个奇怪的事情是导航抽屉图标似乎没问题,以及searchView内的X图标。

这是我所拥有的工具栏的XML:

<android.support.v7.widget.Toolbar
    android:id="@+id/activity_app_list__toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:minHeight="?attr/actionBarSize" />
&#34; colorPrimary&#34;设置为:#ffEFEFEF。

此外,该活动的主题父母是&#34; Theme.AppCompat.Light.NoActionBar&#34; ,因为我已将工具栏设置为actionBar。

问题

如何解决此问题?

这个问题的原因是什么?为什么它在其他Android版本上运行良好?

3 个答案:

答案 0 :(得分:17)

这似乎是一个已知问题:https://code.google.com/p/android/issues/detail?id=78346

解决方法在这里:https://code.google.com/p/android/issues/detail?id=78346#c5,意思是:

<强>值-21 /的themes.xml:

<style name="MyTheme" parent="Theme.AppCompat">
    <item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
</style>

就是这样。希望以后能解决。

为了自定义它,我假设我可以使用它,并使用“colorControlNormal”选择颜色

答案 1 :(得分:9)

我猜你的“app:collapseIcon”属性是你想要的吗?

<android.support.v7.widget.Toolbar
         android:id="@+id/toolbar"
         android:layout_width="match_parent"
         android:layout_height="@dimen/toolbarHeight"
         app:collapseIcon="@drawable/collapseBackIcon" />

答案 2 :(得分:1)

  

如何解决此问题?

我为这个(和其他)问题创建了一个实用程序类。得到它:

https://gist.github.com/consp1racy/96958a1dedf5a99d4ca5

第1部分:在Activity.onCreate(Bundle)中调用以下方法:

ToolbarUtils.fixToolbar(mToolbar);

第2部分:代码使用工具栏中的值android:colorControlNormal&#34;主题&#34;你在布局中指定的。如果您使用支持库并仅定义colorControlNormal,则需要在其后添加以下行:

<item name="android:colorControlNormal" tools:ignore="NewApi">?attr/colorControlNormal</item>
  

这个问题的原因是什么?

经过大量的思考和实验后,似乎箭头使用了原始的位图,它是白色的,没有任何着色,这是错误的。

注意:菜单溢出图标也会显示android:colorControlNormal,所以它现在也会显示正确的颜色。

编辑:先决条件:

您的Toolbar应具有与以下内容类似的属性

<!-- custom toolbar theme -->
<item name="theme">@style/ThemeOverlay.MyApp.ActionBar</item>
<!-- light popup menu theme, change this if you need to -->
<item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
<!-- app bar background color -->
<item name="android:background">@color/material_deep_orange_500</item>

然后工具栏主题应该看起来像这样

<!-- example uses dark app bar template, feel free to change it to light if you need to -->
<style name="ThemeOverlay.MyApp.ActionBar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <!-- this line defines title text color -->
    <item name="android:textColorPrimary">@color/material_white_100</item>
    <!-- this line defines subtitle text color -->
    <item name="android:textColorSecondary">@color/material_white_70</item>
    <!-- this line defines up/hamburger/overflow icons color -->
    <item name="colorControlNormal">@color/material_black_54</item>
    <!-- this line is necessary for proper coloring on lollipop - do not delete it -->
    <item name="android:colorControlNormal" tools:ignore="NewApi">?attr/colorControlNormal</item>
</style>