自定义系统菜单的背景

推荐安卓开发神器(里面有各种UI特效和android代码库实例)

不多说,上图,见代码。


自定义系统菜单的背景

package lab.sodino.menutest;  
import android.content.Context;  
import android.app.Activity;  
import android.os.Bundle;  
import android.os.Handler;  
import android.util.AttributeSet;  
import android.view.InflateException;  
import android.view.LayoutInflater;  
import android.view.Menu;  
import android.view.MenuInflater;  
import android.view.MenuItem;  
import android.view.View;  
import android.widget.Toast;  
/** 
 * @author Sodino E-mail:[email protected] 
 * @version Time:2011-1-26 下午04:42:04 
 */  
public class MenuAct extends Activity {  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
    }  
    public boolean onCreateOptionsMenu(Menu menu) {  
        super.onCreateOptionsMenu(menu);  
        MenuInflater inflater = new MenuInflater(getApplicationContext());  
        inflater.inflate(R.menu.menu, menu);  
        setMenuBackground();  
        return true;  
    }  
    public boolean onOptionsItemSelected(MenuItem item) {  
        String info = "";  
        switch (item.getItemId()) {  
        case R.id.menu_add:  
            info = "Add";  
            break;  
        case R.id.menu_delete:  
            info = "Delete";  
            break;  
        case R.id.menu_home:  
            info = "Home";  
            break;  
        case R.id.menu_help:  
            info = "Help";  
            break;  
        default:  
            info = "NULL";  
            break;  
        }  
        Toast toast = Toast.makeText(this, info, Toast.LENGTH_SHORT);  
        toast.show();  
        return super.onOptionsItemSelected(item);  
    }  
    // 关键代码为重写Layout.Factory.onCreateView()方法自定义布局  
    protected void setMenuBackground() {  
        MenuAct.this.getLayoutInflater().setFactory(new android.view.LayoutInflater.Factory() {  
            /** 
             * name - Tag name to be inflated.<br/> 
             * context - The context the view is being created in.<br/> 
             * attrs - Inflation attributes as specified in XML file.<br/> 
             */  
            public View onCreateView(String name, Context context, AttributeSet attrs) {  
                // 指定自定义inflate的对象  
                if (name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")) {  
                    try {  
                        LayoutInflater f = getLayoutInflater();  
                        final View view = f.createView(name, null, attrs);  
                        new Handler().post(new Runnable() {  
                            public void run() {  
                                // 设置背景图片  
                                view.setBackgroundResource(R.drawable.menu_background);  
                            }  
                        });  
                        return view;  
                    } catch (InflateException e) {  
                        e.printStackTrace();  
                    } catch (ClassNotFoundException e) {  
                        e.printStackTrace();  
                    }  
                }  
                return null;  
            }  
        });  
    }  
}  

/res/menu/menu.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <item android:id="@+id/menu_add" android:title="Add" android:icon="@drawable/menu_add"></item>  
  4.     <item android:id="@+id/menu_delete" android:title="Delete" android:icon="@drawable/menu_delete"></item>  
  5.     <item android:id="@+id/menu_home" android:title="Home" android:icon="@drawable/menu_home"></item>  
  6.     <item android:id="@+id/menu_help" android:title="Help" android:icon="@drawable/menu_help"></item>  
  7. </menu>  

相关推荐