簡體   English   中英

在Android中懸停時設置菜單項背景顏色

[英]Set menu item background color on hover in Android

我的應用程序中有菜單項,我想更改項目背景的顏色,點擊時(請參見屏幕截圖 - 單擊項目1)

單擊項目1

我只想要一種顏色 - 淺藍色或深色。 但是,正如您所看到的,第一個項目中有兩個。

這是我的代碼:

活動中的工具欄:

    <android.support.v7.widget.Toolbar
            xmlns:sothree="http://schemas.android.com/apk/res-auto"
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/main_toolbar"
            sothree:theme="@style/MyActionBar"
            android:layout_alignParentTop="true"
            style="@style/toolbarButton">

            ...

        </android.support.v7.widget.Toolbar>

樣式:

    <style name="toolbarButton">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:clickable">true</item>
    </style>
    <style name="MyActionBar"
        parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
        <item name="android:background">@color/material_dark_blue</item>
        <item name="android:displayOptions">showHome|homeAsUp|showTitle</item>
        <item name="android:icon">@android:color/transparent</item>
        <item name="android:centerX">@android:integer/config_shortAnimTime</item>
        <item name="windowActionBar">false</item>
    </style>
    <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:textColor">@color/material_white</item>
        <item name="android:popupMenuStyle">@style/CustomOverflowBack</item>
        <item name="android:itemTextAppearance">@android:color/white</item>
    </style>

表現:

<application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:hardwareAccelerated="false"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

任何幫助都非常感謝。

更新:添加CustomOverflowBack

    <style name="CustomOverflowBack" parent="@android:style/Widget.Holo.Light.ListPopupWindow">
        <item name="android:popupBackground">@drawable/menu_item</item>
    </style>

Menu_item.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listview_background_shape">

    <stroke android:width="1dp" android:color="@color/material_dark_blue" />
    <solid android:color="@color/actionbar_item_bg_color" />

</shape>

@ Tom11你必須為彈出窗口工具欄聲明一個自定義樣式。

創建一個擴展ThemeOverlay的樣式:

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light">
    <item name="android:colorBackground">@color/colorPrimaryDark</item> 
    <item name="colorControlHighlight">@color/colorAccent</item> 
</style>

在上面的樣式中,將@ color / colorPrimaryDark替換為您的背景顏色,將@ color / colorAccent替換為您選擇的背景顏色。

然后在工具欄聲明中使用它。

<android.support.v7.widget.Toolbar
     android:id="@+id/toolbar"
     android:layout_width="match_parent"
     android:layout_height="?attr/actionBarSize"
     android:background="?attr/colorPrimary"
     style="@style/toolbarButton"
     app:popupTheme="@style/AppTheme.PopupOverlay"/>

這將解決您的問題。

更新:執行以下更改:

  1. 使用上面工具欄項中的操作欄背景顏色將android:background="?attr/colorPrimary"更改為android:background="@color/material_dark_blue"

  2. 從MyActionBar樣式中刪除<item name="android:background">@color/material_dark_blue</item>

因此,工具欄和MyActionBar樣式的更新代碼將如下:

  <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/material_dark_blue"
            style="@style/toolbarButton"
            app:popupTheme="@style/AppTheme.PopupOverlay"
            app:theme="@style/MyActionBar"/>

 <style name="MyActionBar"
           parent="Widget.AppCompat.ActionBar">
        <item name="android:displayOptions">showHome|homeAsUp|showTitle</item>
        <item name="android:icon">@android:color/transparent</item>
        <item name="android:centerX">@android:integer/config_shortAnimTime</item>
        <item name="windowActionBar">false</item>
    </style>

這最終應該有效。

替換它

<style name="toolbarButton">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:clickable">true</item>
</style>
<style name="MyActionBar"
    parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@color/material_dark_blue</item>
    <item name="android:displayOptions">showHome|homeAsUp|showTitle</item>
    <item name="android:icon">@android:color/transparent</item>
    <item name="android:centerX">@android:integer/config_shortAnimTime</item>
    <item name="windowActionBar">false</item>
</style>
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:textColor">@color/material_white</item>
    <item name="android:popupMenuStyle">@style/CustomOverflowBack</item>
    <item name="android:itemTextAppearance">@android:color/white</item>
</style>

<style name="CustomOverflowBack" parent="@android:style/Widget.Holo.Light.ListPopupWindow">
    <item name="android:popupBackground">@drawable/menu_item</item>
</style>

有了這個:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="actionBarPopupTheme">@style/AppThemeOverlay.Popup</item>
</style>

<style name="AppThemeOverlay.Popup" parent="ThemeOverlay.AppCompat.Dark">
    <item name="android:colorBackground">popup menu background color</item>
    <item name="colorControlHighlight">selected item color</item>
</style>

以下是您使用它的方式:

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?actionBarSize"
    android:background="?colorPrimary"
    android:elevation="4dp"
    app:popupTheme="?actionBarPopupTheme"/>

以上內容足以使其在API 21及更高版本上運行。

我省略了toolbarButton樣式,因為它與問題無關。

這里有一些提示

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">

不要將平台樣式用於AppCompat小部件。 如果您使用AppCompat樣式@style/Widget.AppCompat.ActionBar ,則必須覆蓋幾乎沒有屬性。

<item name="android:background">@color/material_dark_blue</item>

主題中的背景將應用於不覆蓋它的任何視圖。 這就是你看到藍色方塊的原因。 android:background是一個樣式屬性,在小部件上使用它。 android:colorBackground是一個主題屬性,它用於(除其他外)為android:popupBackground ,它提供彈出菜單的形狀。

<item name="android:textColor">@color/material_white</item>

文本顏色再次更多地是TextViews上使用的樣式屬性。 廣泛使用的主題屬性是android:textColorPrimaryandroid:textColorSecondary 請改用它們。 主題中的android:textColor可能會產生意外/不需要的結果。

<item name="android:itemTextAppearance">@android:color/white</item>

不要把顏色資源到樣式/文本外觀屬性。 如果不崩潰,它將無法工作或崩潰或更糟糕地產生意外結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM