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; } }); } }