当前位置: 代码迷 >> Android >> android中的menu的背景颜色怎么设置
  详细解决方案

android中的menu的背景颜色怎么设置

热度:31   发布时间:2016-05-01 21:40:26.0
android中的menu的背景颜色如何设置?请指教
android中的menu背景是默认白色的,老板想改成其他颜色的,请各位指点一下,我试了,搞不定,好像要重写LayoutInflater.Factory,但是细节不是太清楚,请指点。

------解决方案--------------------
参考
http://topic.csdn.net/u/20100730/09/0800bfa2-8f10-4a43-9c67-500faa9e1d9b.html
menu中每项都是xml中定义出来的。
可以添加
<item android:id="@+id/happy"
android:title="Happy"
android:icon="@drawable/stat_happy" />
------解决方案--------------------
....

HTML code
  <item android:id="@+id/happy"  android:title="Happy"  android:icon="@drawable/stat_happy"  android:background="#66FFFFFF"/>
------解决方案--------------------
这样可以实现自定义背景,但是聚焦时颜色也不改变了!有点郁闷……
Java code
 /*      *The Options Menu (the one that pops up on pressing the menu button on the emulator)      * can be customized to change the background of the menu    */     package com.pop.menu;    import android.app.Activity;    import android.content.Context;    import android.os.Bundle;    import android.os.Handler;    import android.util.AttributeSet;    import android.util.Log;    import android.view.InflateException;    import android.view.LayoutInflater;    import android.view.Menu;    import android.view.MenuInflater;    import android.view.View;    import android.view.LayoutInflater.Factory;    public class Options_Menu extends Activity {        private static final String TAG = "DEBUG";        /** Called when the activity is first created. */        @Override        public void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.main);        }        /* Invoked when the menu button is pressed */        @Override        public boolean onCreateOptionsMenu(Menu menu) {            // TODO Auto-generated method stub            super.onCreateOptionsMenu(menu);            MenuInflater inflater = new MenuInflater(getApplicationContext());            inflater.inflate(R.menu.options_menu, menu);            setMenuBackground();            return true;        }        /*IconMenuItemView is the class that creates and controls the options menu          * which is derived from basic View class. So We can use a LayoutInflater          * object to create a view and apply the background.         */        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 () {                                    view.setBackgroundResource( R.drawable.background);                                }                            } );                            return view;                        }                        catch ( InflateException e ) {}                        catch ( ClassNotFoundException e ) {}                    }                    return null;                }            });        }    }
  相关解决方案