自定义系统菜单的背景
不多说,上图,见代码。
- packagelab.sodino.menutest;
- importandroid.content.Context;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.os.Handler;
- importandroid.util.AttributeSet;
- importandroid.view.InflateException;
- importandroid.view.LayoutInflater;
- importandroid.view.Menu;
- importandroid.view.MenuInflater;
- importandroid.view.MenuItem;
- importandroid.view.View;
- importandroid.widget.Toast;
- /**
- *@authorSodinoE-mail:[email protected]
- *@versionTime:2011-1-26下午04:42:04
- */
- publicclassMenuActextendsActivity{
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- }
- publicbooleanonCreateOptionsMenu(Menumenu){
- super.onCreateOptionsMenu(menu);
- MenuInflaterinflater=newMenuInflater(getApplicationContext());
- inflater.inflate(R.menu.menu,menu);
- setMenuBackground();
- returntrue;
- }
- publicbooleanonOptionsItemSelected(MenuItemitem){
- Stringinfo="";
- switch(item.getItemId()){
- caseR.id.menu_add:
- info="Add";
- break;
- caseR.id.menu_delete:
- info="Delete";
- break;
- caseR.id.menu_home:
- info="Home";
- break;
- caseR.id.menu_help:
- info="Help";
- break;
- default:
- info="NULL";
- break;
- }
- Toasttoast=Toast.makeText(this,info,Toast.LENGTH_SHORT);
- toast.show();
- returnsuper.onOptionsItemSelected(item);
- }
- //关键代码为重写Layout.Factory.onCreateView()方法自定义布局
- protectedvoidsetMenuBackground(){
- MenuAct.this.getLayoutInflater().setFactory(newandroid.view.LayoutInflater.Factory(){
- /**
- *name-Tagnametobeinflated.<br/>
- *context-Thecontexttheviewisbeingcreatedin.<br/>
- *attrs-InflationattributesasspecifiedinXMLfile.<br/>
- */
- publicViewonCreateView(Stringname,Contextcontext,AttributeSetattrs){
- //指定自定义inflate的对象
- if(name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")){
- try{
- LayoutInflaterf=getLayoutInflater();
- finalViewview=f.createView(name,null,attrs);
- newHandler().post(newRunnable(){
- publicvoidrun(){
- //设置背景图片
- view.setBackgroundResource(R.drawable.menu_background);
- }
- });
- returnview;
- }catch(InflateExceptione){
- e.printStackTrace();
- }catch(ClassNotFoundExceptione){
- e.printStackTrace();
- }
- }
- returnnull;
- }
- });
- }
- }
/res/menu/menu.xml
- <?xmlversion="1.0"encoding="utf-8"?>
- <menuxmlns:android="http://schemas.android.com/apk/res/android">
- <itemandroid:id="@+id/menu_add"android:title="Add"android:icon="@drawable/menu_add"></item>
- <itemandroid:id="@+id/menu_delete"android:title="Delete"android:icon="@drawable/menu_delete"></item>
- <itemandroid:id="@+id/menu_home"android:title="Home"android:icon="@drawable/menu_home"></item>
- <itemandroid:id="@+id/menu_help"android:title="Help"android:icon="@drawable/menu_help"></item>
- </menu>