自定义系统菜单的背景

    技术2022-05-20  38

    不多说,上图,见代码。

     

    view plain copy to clipboard print ? 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:sodinoopen@hotmail.com  * @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

     

    view plain copy to clipboard print ? <?xml version="1.0" encoding="utf-8"?>  <menu xmlns:android="http://schemas.android.com/apk/res/android">      <item android:id="@+id/menu_add" android:title="Add" android:icon="@drawable/menu_add"></item>      <item android:id="@+id/menu_delete" android:title="Delete" android:icon="@drawable/menu_delete"></item>      <item android:id="@+id/menu_home" android:title="Home" android:icon="@drawable/menu_home"></item>      <item android:id="@+id/menu_help" android:title="Help" android:icon="@drawable/menu_help"></item>  </menu>  

     

    转载: http://blog.csdn.net/sodino/archive/2011/01/26/6165132.aspx


    最新回复(0)