当按下时更改 Android ShareActionProvider 的背景颜色

3

我的应用程序的主要颜色是一种黄色。操作栏中的ShareActionProvider有一种旋转器,当按下时会显示默认的holo蓝色。

为了使操作栏样式协调,我需要在按下共享按钮时将背景变成黄色。如何实现?

我正在使用标准操作栏(没有兼容性或sherlock)

这个方法行不通:

shareMenuItem.getActionView().setBackgroundResource(R.drawable.spinner_background_ab_webcamhd_custom_ab);

而且关于如何设计ShareActionProvider的问题,在SO上面没有任何回答 :(


请查看我在http://stackoverflow.com/a/20912711/973379的回答。 - Piotr Zawadzki
4个回答

4

我希望出现一个白色背景的白色分享按钮。所以,我首先将主题中的textColorSecondary更改为白色。

<style name="MainTheme" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="colorPrimary">@color/appprimary</item>
            <item name="colorPrimaryDark">@color/appprimaryDark</item>
            <item name="colorAccent">@color/appaccent</item>
            <item name="android:textColorPrimary">#ffffff</item>
            <item name="android:textColorSecondary">#ffffff</item>
            <item name="android:textColor">#212121</item>
            <item name="listPopupWindowStyle">@style/PopupListStyle</item>
</style>

接着,我使用了intips答案中提供的自定义弹窗样式:

    <style name="PopupListStyle" parent="@style/Widget.AppCompat.Light.ListPopupWindow">
        <item name="android:popupBackground">#ffffff</item>
    </style>

然后我在我的工具栏中设置了这个主题:

<android.support.v7.widget.Toolbar
  android:id="@+id/toolbar"
  android:layout_width="match_parent"
  android:layout_height="?attr/actionBarSize"
  android:minHeight="?attr/actionBarSize"
  app:layout_collapseMode="pin"
  app:theme="@style/MainTheme">

enter image description here


2

我把这个添加到我的主题中,它起作用了:

<item name="listPopupWindowStyle">@style/Widget.AppCompat.Light.ListPopupWindow</item>

所以,如果您想自定义颜色,您需要创建自己的样式。

1
< p >“ShareActionProvider”难道不使用标准的操作栏背景吗?如果是这样,您可以通过覆盖主题中使用的资源来控制它。例如:

<style name="AppTheme" parent="android:Theme.Holo.Light">
    <item name="android:actionBarItemBackground">@drawable/your_selector</item>
</style>

如果您想了解如何构建XML选择器Drawable,请查看系统使用的一个示例,就像这样

更新

如何自行查找。

  1. 查找SharedActionProvider的源代码并检查onCreateActionView()
  2. 跟随到ActivityChooserView,它是在onCreateActionView()中创建的View
  3. 观察在ActivityChooserView的构造函数中膨胀的布局,在这种情况下是R.layout.activity_chooser_view
  4. 查找R.layout.activity_chooser_view的源代码并找到用于按钮的布局,在这种情况下是@+id/expand_activities_button
  5. 观察用于背景的资源,在这种情况下是android:background="?android:attr/actionBarItemBackground"

我的AB操作已经具备了正确的背景(我在我的主题中使用了android:actionBarItemBackground)。所以这并不简单。 - Vincent Mimoun-Prat
你有没有想过为什么android:actionBarItemBackground属性不能正确使用? - Vincent Mimoun-Prat
这可能是问题中有用的信息。 :-) 我很难确定为什么不使用 actionBarItemBackground - Paul Burke

1
如果有人遇到同样的问题,这是对我有效的解决方法:
- 在AppTheme中添加:
    <item name="listPopupWindowStyle">@style/PopupListStyle</item>

- 为列表弹出窗口创建新样式:
    <style name="PopupListStyle" parent="@style/Widget.AppCompat.Light.ListPopupWindow">
       <item name="android:popupBackground">@color/list_popup_bg</item>
    </style>

但是在将背景改为白色后,现在我看不到白色的文本了...如何更改文本颜色? - Bruce

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接