在安卓系统中覆盖上下文菜单颜色

10

让我们看看,

我知道如何改变ListView的样式(当选中一个项目时变为橙色):

android:listSelector="@drawable/xxx" 和一个包含位图或者@color的drawable

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable="@drawable/image" />
    <item android:drawable="@android:color/transparent" />  
</selector> 

问题在于,为了有一个连贯的设计,我必须对上下文菜单做同样的事情,但我就是看不到在哪里进行更改。没有listSelector,也没有可供更改的内容。


1
据我所知,您无法更改上下文菜单的选择器,因为这应该是平台的标准。 - CommonsWare
这正是我所想的,谢谢你的回答! - ferostar
3个回答

6
如果您所说的上下文菜单是指长按后出现的菜单,则可以使用以下代码实现。我的菜单具有主题背景和绿色高亮显示。
上下文菜单布局:
<menu
  xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/resetConfirm" android:title="@string/actual_reset"></item>
</menu>

我正在使用一个自定义主题,这是我认为的关键,它在styles.xml中实现。

 <style name="GradientLight" parent="@android:style/Theme.Light">
    <item name="android:windowBackground">@drawable/background</item>
    <item name="android:progressBarStyle">@style/progressBar</item>
    <item name="android:buttonStyle">@style/greenButton</item>
    <item name="android:buttonStyleSmall">@style/greenButton</item>
    <item name="android:listViewStyle">@style/listView</item>
    <item name="android:itemBackground">@drawable/menu_selector</item>
    <item name="android:spinnerStyle">@style/spinner</item>
</style>
<style name="listView" parent="@android:style/Widget.ListView.White">
 <item name="android:background">@drawable/background</item>
 <item name="android:listSelector">@drawable/list_selector_background_green</item>
</style>

这就是我在 ApplicationManifest.xml 文件中应用于应用程序级别的主题。 - NKijak

5
这是我唯一成功的方法:
您可以在应用程序主题中覆盖android属性actionModeBackground(我在Android / Sdk / platforms / android-22 / data / res / values / themes_holo.xml和R.attr中找到),以使其生效。
<style name="AppTheme" parent="android:Theme.Holo">
    <item name="android:windowBackground">@color/background</item>
    <item name="android:actionBarStyle">@style/MyActionBar</item>
    <item name="android:actionModeBackground">@drawable/context_menu</item>
    ...
</style>

并将其替换为您自己的可绘制和颜色,在这种情况下,

context_menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/context_menu_bottom" />
    <item android:drawable="@drawable/context_menu_top"/>
</layer-list>

由以下组成

context_menu_bottom.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="@color/accent"/>
    <padding android:bottom="4dp"/>
</shape>

并且

context_menu_top.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="@color/primary"/>
</shape>

希望能帮到您!

4

以下是如何操作。进入 resources > styles.xml 并按照以下方式覆盖主题的 itemBackgroud 属性值:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="android:itemBackground">"YOUR_COLOUR_HERE"</item>
</style>

如果这样不管用,检查一下AndroidManifest.xml文件确保你的应用程序级别使用的是同一个主题:

<application
    ...
    android:theme="@style/AppTheme">

    ...

 </application>

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