【问题标题】:Override context menu colors in Android覆盖 Android 中的上下文菜单颜色
【发布时间】:2017-04-02 01:23:37
【问题描述】:

让我们看看,

我知道如何更改 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,没什么可改变的。

【问题讨论】:

  • AFAIK,您不能更改上下文菜单的选择器,因为这应该是平台的标准。
  • 我就是这么想的,谢谢回答!

标签: java android user-interface


【解决方案1】:

如果上下文菜单是指长按菜单,那么我使用以下代码完成了此操作。我的菜单有我的主题背景和绿色突出显示。

上下文菜单布局:

<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中应用层应用的主题
【解决方案2】:

这是唯一对我有用的方法:

您可以在您的应用主题中覆盖 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>

希望对你有帮助!

【讨论】:

    【解决方案3】:

    这是你的做法。转到 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>
    

    如果这不起作用,请在 AndroidManifet.xml 中检查您是否真的在应用级别使用相同的主题:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      相关资源
      最近更新 更多