Cara untuk mengubah warna latar belakang dari Tindakan Bar's Pilihan Menu di Android 4.2?

I'd seperti untuk mengubah warna latar belakang pilihan (overflow) menu di Android 4.2. Saya telah mencoba semua metode tapi itu masih menunjukkan warna default yang ditetapkan oleh tema. Saya menggunakan kode berikut & XML konfigurasi.

MainActivity.java

public class MainActivity extends Activity {

@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    getActionBar().setIcon(R.drawable.ic_launcher);     
    getActionBar().setTitle("Sample Menu");
    getActionBar().setBackgroundDrawable(new 
               ColorDrawable(Color.parseColor("#33B5E5"))); 

    int titleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "android");
    TextView titleText = (TextView)findViewById(titleId);
    titleText.setTextColor(Color.parseColor("#ffffff"));

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    setMenuBackground();
    return true;
}

protected void setMenuBackground(){                     
    // Log.d(TAG, "Enterting setMenuBackGround");  
    getLayoutInflater().setFactory( new Factory() { 

        @Override
        public View onCreateView(String name, Context context,
                AttributeSet attrs) {
            if ( name.equalsIgnoreCase( "com.android.internal.view.menu.IconMenuItemView" ) ) {
                try { // Ask our inflater to create the view  
                    LayoutInflater f = getLayoutInflater();  
                    final View view = f.createView( name, null, attrs );  
                    /* The background gets refreshed each time a new item is added the options menu.  
                    * So each time Android applies the default background we need to set our own  
                    * background. This is done using a thread giving the background change as runnable 
                    * object */
                    new Handler().post( new Runnable() {  
                        public void run () {  
                            // sets the background color   
                            view.setBackgroundResource( R.color.menubg);
                            // sets the text color              
                            ((TextView) view).setTextColor(Color.WHITE);
                            // sets the text size              
                            ((TextView) view).setTextSize(18);
            }
                    } );  
                return view;
            }
        catch ( InflateException e ) {}
        catch ( ClassNotFoundException e ) {}  
    } 
            return null;
        }});
}

}

Menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/action_settings"
    android:icon="@drawable/menu"
    android:showAsAction="always"
    android:title="@string/action_settings">
    <menu>
        <item
            android:id="@+id/item1"               
            android:showAsAction="always"
            android:title="@string/item1" />
        <item
            android:id="@+id/item2"               
            android:showAsAction="always"
            android:title="@string/item2" />
        <item
            android:id="@+id/item3"
            android:showAsAction="always"
            android:title="@string/item3" />
        <item
            android:id="@+id/item4"
            android:showAsAction="always"
            android:title="@string/item4" />
    </menu>
</item>

</menu>

color.xml

<color name="menubg">#33B5E5</color>

Di atas setMenuBackground tidak mengambil efek:

![Menu Sample](http://i.stack.imgur.com/xFlzp.png)

Pada gambar di atas, saya ingin mengubah menu latar belakang dari warna hitam ke warna biru di Bar Tindakan. Bagaimana saya bisa mencapai ini, dan apa yang saya lakukan salah?

Mengomentari pertanyaan (1)

The Aksi Bar Style Generator, disarankan oleh Sunny, adalah sangat berguna, tetapi menghasilkan banyak dari file, yang sebagian besar tidak relevan jika anda hanya ingin mengubah warna latar belakang.

Jadi, saya menggali lebih dalam ke dalam kantong itu menghasilkan, dan mencoba untuk mempersempit apa saja bagian-bagian yang penting, sehingga saya dapat membuat jumlah minimum dari perubahan untuk aplikasi saya. Di bawah ini adalah apa yang saya temukan.


Dalam gaya generator, setelan yang relevan adalah Popup warna, yang mempengaruhi "Overflow menu, submenu dan spinner panel latar belakang".

Pergi dan menghasilkan zip, tapi dari semua file yang dihasilkan, anda hanya benar-benar membutuhkan satu gambar, menu_dropdown_panel_example.9.png, yang terlihat seperti ini:

Jadi, tambahkan resolusi yang berbeda versi dari itu untuk res/drawable-*. (Dan mungkin mengubah nama mereka untuk menu_dropdown_panel.9.png.)

Maka, sebagai contoh, dalam res/values/themes.xml anda akan memiliki yang berikut, dengan android:popupMenuStyle dan android:popupBackground menjadi kunci pengaturan.




        @style/MyApp.PopupMenu
        @style/MyApp.ActionBar




        @drawable/menu_dropdown_panel





        @drawable/blue_action_bar_background


Dan, tentu saja, dalam AndroidManifest.xml:

Apa yang anda dapatkan dengan setup ini:

Perhatikan bahwa I'm menggunakan Tema.Holo.Cahaya sebagai dasar tema. Jika anda menggunakan Tema.Holo (Holo Gelap), ada's langkah tambahan yang diperlukan sebagai jawaban ini menggambarkan!

Juga, jika anda (seperti saya) ingin gaya seluruh Tindakan Bar, bukan hanya menu, menempatkan sesuatu seperti ini dalam res/drawable/blue_action_bar_background.xml:



















Karya besar setidaknya pada Android 4.0 (API 14 tingkat+).

Komentar (11)

Dalam kasus orang-orang yang masih berada di untuk solusi yang bekerja, di sini adalah apa yang bekerja untuk saya: - Ini adalah untuk Appcompat dukungan perpustakaan. Ini adalah kelanjutan untuk styling ActionBar dijelaskan di sini

Berikut adalah styles.xml file.





        @style/MyActionBar

        @style/MyActionBar.MenuTextStyle

        @color/skyBlue



        @color/red
        @style/MyActionBarTitle



        @color/white



        @color/red
        bold
        25sp

dan ini adalah bagaimana hal itu tampak--MenuItem latar belakang warna biru langit dan MenuItem teks warna merah muda dengan textsize sebagai 25sp:--

Komentar (9)
Larutan

Ada cara mudah untuk mengubah warna Actionbar Gunakan ActionBar Generator dan copy paste semua file di res folder dan mengubah tema di Android.file manifest.

Komentar (2)

Jika anda membaca ini, it's mungkin karena semua jawaban sebelumnya tidak't bekerja untuk anda Holo Gelap berdasarkan tema.

Holo Gelap menggunakan tambahan pembungkus untuk PopupMenus, jadi setelah melakukan apa yang Jonik menyarankan anda harus menambahkan kode berikut gaya 'xml' file:


    @style/YourPopupMenu

Kemudian referensi anda dalam tema blok:


    .
    .
    .
    @style/PopupWrapper

Yang's itu!

Komentar (4)

Saya trik sederhana untuk mengubah warna latar belakang dan warna teks pada Popup Menu / Menu Pilihan


    @style/MyPopupMenu
    @style/TextAppearance



    @color/Your_color_for_background 



    @color/Your_color_for_text
Komentar (1)

Dalam kasus anda bekerja di terbaru toolbar di android studio maka di sini adalah yang terkecil solusi Untuk mengubah toolbar menu pilihan warna, tambahkan ke toolbar elemen

 app:popupTheme="@style/MyDarkToolbarStyle"

Kemudian pada anda styles.xml menentukan popup menu style

`<nama style="MyDarkToolbarStyle" orang tua="ThemeOverlay.AppCompat.Cahaya">

<nama barang="android:colorBackground">@color/mtrl_white_100 <nama barang="android:textColor">@color/mtrl_light_blue_900 `

Perhatikan bahwa anda perlu menggunakan colorBackground bukan latar belakang. Yang terakhir akan diterapkan untuk segala sesuatu (menu itu sendiri dan masing-masing item menu), mantan hanya berlaku untuk menu popup.

Komentar (0)

I'm juga dipukul dengan masalah yang sama, akhirnya saya punya solusi sederhana. hanya menambahkan satu baris untuk tindakan bar gaya.


    @color/colorAccent
    @color/colorAppWhite

"android:colorBackground" cukup untuk mengubah pilihan menu latar belakang

Komentar (0)

Cara CEPAT!

styles.xml



    @color/colorBackground
    @color/colorItem

Kemudian tambahkan ini gaya tertentu untuk anda AppTheme gaya


    ...
    @style/popupTheme

SELESAI!

Komentar (1)

Anda dapat menerapkan gaya dan Tema yang di Meluap MenuItem sesuai di bawah ini. Menu OverFlow adalah ListView jadi, kita dapat menerapkan tema sesuai listview.

Terapkan kode di bawah ini di styles.xml


@style/PopupMenuListView
        @style/PopupMenuTextView
        @style/PopupMenu
        40dp




        @color/app_navigation_divider
        1sp
        @drawable/list_selector




        @color/app_white
        normal
        18sp
        25dp
        @drawable/navigation_arrow_selector




        @drawable/menu_overflow_bg
Komentar (0)

Saya bisa mengubah warna dari tindakan yang melimpah hanya dengan memasukkan nilai hex pada:



    HEX VALUE OF COLOR
Komentar (0)

Dalam aplikasi tema, anda dapat mengatur android:itemBackground properti untuk mengubah warna dari menu tindakan.

Misalnya:


        @color/drk_colorPrimary
        @color/drk_colorPrimaryDark
        @color/drk_colorAccent
        @style/NoTitle
        true
        @color/white


        @color/drk_colorPrimary
Komentar (0)

Tambahkan berikut ini untuk anda Styles.xml



    @color/white
    @color/colorPrimaryDark

Mengubah tema di activity_main.xml hanya.

android:theme="@style/Custom_Theme"
Komentar (0)

Coba kode ini. Tambahkan potongan ini untuk anda res>nilai>styles.xml


    @style/Theme.stylingactionbar.widget


    @color/DarkSlateBlue



    @style/PopupMenu

Dan di Manifest.xml tambahkan berikut cuplikan di bawah aplikasi

Komentar (0)

Saya menggunakan ini dan itu bekerja dengan baik.

Menerapkan kode ini di onCreate() fungsi

val actionBar: android.support.v7.app.ActionBar? = supportActionBar
    actionBar?.setBackgroundDrawable(ColorDrawable(Color.parseColor("Your color code here")))    
Komentar (0)

    #424242
    @style/TextAppearance



    #E9E2BF
Komentar (0)

Berikut ini adalah perubahan-perubahan yang diperlukan dalam tema anda untuk mengubah tindakan bar & overflow menu warna latar belakang. Anda perlu mengkonfigurasi "android:latar belakang" dari actionBarStyle & popupMenuStyle




        @style/ActionBarLight
        @style/ListPopupWindowLight



        @color/white



        @color/white
Komentar (0)