Create Menu详解

http://wayfarer.iteye.com/blog/478817

Most applications include two kinds of human-computer interactive: Views and Menu.

[color=red]1. options menu[/color]
options menu最多只能在屏幕最下面显示6个菜单选项,称为icon menu,icon menu不能有checkable选项。多于6的菜单项会以more icon menu来调出,称为expanded menu。options menu通过activity的onCreateOptionsMenu来生成,这个函数只会在menu第一次生成时调用。任何想改变options menu的想法只能在onPrepareOptionsMenu来实现,这个函数会在menu显示前调用。onOptionsItemSelected 用来处理选中的菜单项。

[img]http://dl.iteye.com/upload/attachment/389690/f39fe531-9573-3edd-ac07-727ddd0d625a.jpg[/img]
(1) options_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group>
<item android:id="@+id/item1"
android:title="Item1"
android:icon="@android:drawable/ic_dialog_alert"
/>
<item android:id="@+id/item2"
android:title="Item2"
android:icon="@android:drawable/ic_dialog_info"
/>
</group>
<group>
</group>
</menu>

(2)MainActivity.java

public class MainActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);

MenuItem m1 = menu.findItem(R.id.item1);
MenuItem m2 = menu.findItem(R.id.item2);
// m1.setIntent(intent1);
// m2.setIntent(intent2);

return super.onCreateOptionsMenu(menu);
}

public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.item1:
// actionClickMenuItem1();
break;
case R.id.item2:
// actionClickMenuItem2();
break;
}
return super.onOptionsItemSelected(item);
}

}


[color=red]2. sub menus(暂时发现,这个menu没有办法添加icon)[/color]

public class MainActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

public boolean onCreateOptionsMenu(Menu menu) {
SubMenu m1 = menu.addSubMenu("SubM1");
SubMenu m2 = menu.addSubMenu("SubM2");
MenuItem m1_sub1 = m1.add("m1_1");
MenuItem m1_sub2 = m1.add("m1_2");
m2.add(0, 0, 0, "m2_2");
m2.add(0, 1, 0, "m2_2");

m1_sub1.setIcon(getResources().getDrawable(R.drawable.ic_dialog_alert)); // 不起任何作用
m1_sub2.setIcon(R.drawable.ic_dialog_info); // 不起任何作用
return super.onCreateOptionsMenu(menu);
}

public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == 0) {
} else if (item.getItemId() == 1) {
}
return super.onOptionsItemSelected(item);
}
}

[color=red]3. context menu ( context menu需要在view上按上2s后显示 )[/color]
context menu是跟某个具体的view绑定在一起的。
Step 1:
>>调用"registerForContextMenu( view )", 去注册会弹出Context Menu的view.
Step 2:
>>实现"onCreateContextMenu( ContextMenu menu, View v, ContextMenuInfo menuInfo )"方法, 你可以根据View的值来判断是要激活哪个view的contex menu.
Step 3:
>> 实现"onContextItemSelected( MenuItem item )", 当选择了Context Menu中一个菜单项后, 系统会调用这个方式, 你可以透过ID来知道是哪一个menu item被选择了.

public class MainActivity extends Activity {
private TextView tv;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.main_tv);
registerForContextMenu(tv);
}
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
if (v == tv) {
menu.add(0, 0, 0, "Context Menu One");
menu.add(0, 1, 0, "Context Menu Two");

//同sub menu一样,同样无法赋予icon
}
}
public boolean onContextItemSelected(MenuItem item) {
if (item.getItemId() == 0) {
tv.setText("Click Context Menu One");
} else if (item.getItemId() == 1) {
tv.setText("Click Context Menu Two");
}
return super.onContextItemSelected(item);
}
}



Android新的menu实现——ActionMode
[url]http://blog.csdn.net/xyz_lmn/article/details/12754785[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值