Activity 菜单功能

在Android应用中我们经常会使用菜单功能,而它又分为标准菜单和上下文菜单两种。

1.上下文菜单

注册上下文菜单到给定的VIew ------> void registerForContextMenu(View view);

创建你所要展示的上下文菜单元素 -----> void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo);

菜单点击事件处理 ----> boolean onContextItemSelected(MenuItem item); 


2.标准菜单,在版本3.0以上后都和ActionBar一起使用,通过物理功能Menu键可以控制。

创建标准菜单 -----> onCreateOptionsMenu(Menu menu); 该方法只执行一次,2种方式用于创建你所需元素,代码创建和menu.xml引入

在显示菜单前调用 ----> onPrepareOptionsMenu(Menu menu); 用于控制是否显示菜单,修改编辑菜单

菜单点击事件处理 -----> onOptionsItemSelected(MenuItem item);


menu.xml资源需要放在res/menu中

<menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/action_add"
          android:icon="@android:drawable/ic_menu_add"
          android:title="@string/action_bar_add" />
    <item android:id="@+id/action_edit"
          android:icon="@android:drawable/ic_menu_edit"
          android:title="@string/action_bar_edit"
          app:showAsAction="always" />
    <item android:id="@+id/action_share"
          android:icon="@android:drawable/ic_menu_share"
          android:title="@string/action_bar_share"
          app:showAsAction="ifRoom" />
    <item android:id="@+id/action_sort"
          android:icon="@android:drawable/ic_menu_sort_by_size"
          android:title="@string/action_bar_sort"
          app:showAsAction="ifRoom">
        <menu>
            <item android:id="@+id/action_sort_size"
                  android:icon="@android:drawable/ic_menu_sort_by_size"
                  android:title="@string/action_bar_sort_size"
                  android:onClick="onSort" />
            <item android:id="@+id/action_sort_alpha"
                  android:icon="@android:drawable/ic_menu_sort_alphabetically"
                  android:title="@string/action_bar_sort_alpha"
                  android:onClick="onSort" />
        </menu>
    </item>
</menu>


代码例子:

public class MainActivity extends Activity {
	private Button btn;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		btn = (Button) findViewById(R.id.btn);
		// 给Button 注册上下文菜单
		registerForContextMenu(btn);
	}

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
		// TODO Auto-generated method stub
		super.onCreateContextMenu(menu, v, menuInfo);
		// 代码创建上下文菜单元素 ,其中itemId是唯一的
		menu.add(1, 1, 1, "删除");
		menu.add(1, 2, 1, "更新");
		menu.add(1, 3, 1, "新增");
		
		// 通过引入menu.xml的方式控制菜单元素
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.actions, menu);
	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		int itemId = item.getItemId();
		switch (itemId) {
		case 1:
			Toast.makeText(getApplicationContext(), "click删除菜单", Toast.LENGTH_SHORT).show();
			break;

		case 2:
			Toast.makeText(getApplicationContext(), "click更新菜单", Toast.LENGTH_SHORT).show();
			break;

		case 3:
			Toast.makeText(getApplicationContext(), "click新增菜单", Toast.LENGTH_SHORT).show();
			break;

		default:
			break;
		}
		return super.onContextItemSelected(item);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub
		Log.i("TAG", "onCreateOptionsMenu");
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.actions, menu);
		return true;
	}

	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub
		// 这里可以做修改菜单和控制菜单有效
		return super.onPrepareOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		Toast.makeText(this, "Selected Item: " + item.getTitle(), Toast.LENGTH_SHORT).show();
		return true;
	}

}
这样菜单功能就完成。

你可能感兴趣的:(android,contextMenu,optionsMenu)