MenuItem offlogin = menu.getItem(0); offlogin.setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override
在android开发中,menu的应用是个麻雀虽小却很实用的一个UI部件,它的出现让开发者的部署空间大大增加,当然,张小龙先生一直很讨厌APP的空间布局二维化,这个是仁者见仁智者见智的事情了。
废话不多说,几天晚上上网找了几篇关于menu开发的文章,但是清一色的发现都是以menu的JAVA布局开发为主,基本都用到了menu.add属性,本人是个很不喜欢把布局和后台逻辑给混为一体的人,一直觉得在JAVA中控制UI的布局很杂乱,因此找了篇依赖xml设置布局的文章与大家分享吧。
- <?xml version="1.0" encoding="utf-8"?>
- <menu xmlns:android="http://schemas.android.com/apk/res/android" >
- <item
- android:id="@+id/close"
- android:icon="@drawable/ic_launcher"
- android:orderInCategory="3"
- android:title="Close"/>
- <item
- android:id="@+id/no_icon"
- android:orderInCategory="2"
- android:title="Sans Icon"/>
- <item
- android:id="@+id/disabled"
- android:enabled="true"
- android:orderInCategory="4"
- android:title="Disabled"/>
- <!-- orderInCategory表示的是item的排序-->
- <group
- android:id="@+id/other_stuff"
- android:menuCategory="secondary"
- android:visible="true" >
- <item
- android:id="@+id/later"
- android:orderInCategory="0"
- android:title="2nd-To-Last"/>
- <item
- android:id="@+id/last"
- android:orderInCategory="1"
- android:title="Last"/>
- </group>
- <!--表示的是二级菜单-->
- <item
- android:id="@+id/submenu"
- android:orderInCategory="3"
- android:title="A Submenu">
- <menu>
- <item
- android:id="@+id/non_ghost"
- android:alphabeticShortcut="n"
- android:title="Non-Ghost"
- android:visible="true"/>
- <item
- android:id="@+id/ghost"
- android:alphabeticShortcut="g"
- android:title="A Ghost"
- android:visible="true"/>
- </menu>
- </item>
- </menu>
- package com.src.hero.org;
- import android.app.Activity;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.Menu;
- import android.view.MenuInflater;
- import android.view.MenuItem;
- /**
- * Receiver To Study
- *
- * @author Hero
- *
- */
- public class ReceiverActivity extends Activity {
- /** Called when the activity is first created. */
- private static final String TAG="ReceiverActivity";
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // TODO Auto-generated method stub
- MenuInflater mflater=new MenuInflater(this);
- mflater.inflate(R.menu.menuitem, menu);
- return super.onCreateOptionsMenu(menu);
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // TODO Auto-generated method stub
- switch(item.getItemId()){
- case R.id.close:
- Log.v(TAG, "------------close");
- break;
- case R.id.no_icon:
- Log.v(TAG, "------------noicon");
- break;
- case R.id.submenu:
- Log.v(TAG, "------------submenu");
- break;
- case R.id.non_ghost:
- Log.v(TAG, "------------non_ghost");
- break;
- case R.id.ghost:
- Log.v(TAG, "------------ghost");
- break;
- case R.id.disabled:
- Log.v(TAG, "------------disabled");
- break;
- case R.id.last:
- Log.v(TAG, "------------last");
- break;
- case R.id.later:
- Log.v(TAG, "------------laster");
- break;
- default:
- break;
- }
- return super.onOptionsItemSelected(item);
- }
- }
这个代码大家基本看过之后都一目了然,没有太多需要解说的地方,就是安卓开发的一贯步骤,先重写,设定监听器等等。
值得一提的是,监听部分作者利用的是switch(item.getItemId());该方法使用起来有个不好的地方就是当有大量代码需要操作的话会使得代码看起来很繁乱。事实上,MenuItem off = (MenuItem) findViewById(R.id.off);是无法取得item的实例对象的,应该是
MenuItem offlogin = menu.getItem(0);
offlogin.setOnMenuItemClickListener(new OnMenuItemClickListener()
{
@Override
public boolean onMenuItemClick(MenuItem item){
System.out.println("off");
return false;
}
});
return true;
这样才是正确的方法,单个绑定监听器的方法可以如此完成。其中,getItem()的参数在android:orderInCategory中定义。
这样就可以单独给每个按键设定监听器,也做到了布局文件和逻辑算法相互隔离的作用。(zhuzheic)