1)Activity中添加Menu的方法
方法一,通过xml文件添加静态菜单:
在res/menu目录下定义一个menulayout.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/add" android:title="@string/add"
android:enabled="false" android:icon="@android:drawable/ic_menu_add" />
<item android:id="@+id/edit" android:title="@string/edit"
android:icon="@android:drawable/ic_menu_edit" />
</menu>
然后在Activity中重写相应的方法:
@Override
public boolean onCreateOptionsMenu(Menu arg0) {
getMenuInflater().inflate(R.menu.menulayout, arg0);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.add:
Toast.makeText(this, "add", Toast.LENGTH_LONG).show();
break;
case R.id.edit:
Toast.makeText(this, "edit", Toast.LENGTH_LONG).show();
break;
}
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.add).setEnabled(true);
return true;
}
通过xml文件添加父子级别Menu:
在res/menu目录下定义一个menulayout.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/add" android:title="@string/add"
android:enabled="false" android:icon="@android:drawable/ic_menu_add" />
<item android:id="@+id/edit" android:title="@string/edit"
android:icon="@android:drawable/ic_menu_edit" />
<item android:id="@+id/more" android:title="@string/more"
android:icon="@android:drawable/ic_menu_more">
<menu>
<item android:id="@+id/moreone" android:title="@string/moreone"></item>
<item android:id="@+id/moretwo" android:title="@string/moretwo"></item>
</menu>
</item>
</menu>
然后在Activity中重写相应的方法:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menulayout, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.add:
Toast.makeText(this, "add", Toast.LENGTH_LONG).show();
break;
case R.id.edit:
Toast.makeText(this, "edit", Toast.LENGTH_LONG).show();
break;
case R.id.moreone:
Toast.makeText(this, "moreone", Toast.LENGTH_LONG).show();
break;
case R.id.moretwo:
Toast.makeText(this, "moretwo", Toast.LENGTH_LONG).show();
break;
case R.id.more:
Toast.makeText(this, "more", Toast.LENGTH_LONG).show();
break;
}
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.moreone).setEnabled(false);
return true;
}
方法二,在Activity中动态创建Menu:
//定义MenuItem的ID
private static final int MENU_ADD = Menu.FIRST;
private static final int MENU_EDIT = Menu.FIRST + 1;
然后重写相应的方法:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, MENU_ADD, 0, "Add").setIcon(android.R.drawable.ic_menu_add).setEnabled(false);
menu.add(0, MENU_EDIT, 0, "Edit").setIcon(android.R.drawable.ic_menu_edit);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_ADD:
Toast.makeText(this, "add", Toast.LENGTH_LONG).show();
break;
case MENU_EDIT:
Toast.makeText(this, "edit", Toast.LENGTH_LONG).show();
break;
}
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.getItem(MENU_ADD).setEnabled(true);//无法获得item,不能修改enable值
menu.findItem(MENU_ADD).setEnabled(true);//无法获得item,不能修改enable值
menu.clear();
menu.add(0, MENU_ADD, 0, "Add").setIcon(android.R.drawable.ic_menu_add);
menu.add(0, MENU_EDIT, 0, "Edit").setIcon(android.R.drawable.ic_menu_edit);
return true;
}
注:可以通过Activity的openOptionsMenu()方法来触发Menu事件。
2) Activity中添加上下文菜单
首先,想要显示ContextMenu(上下文菜单)需要触发View的长按事件,而且其长按事件的返回值必须为false,如果其长按事件的返回值为true,则不会触发onCreateContextMenu回调方法的调用。ContextMenu不支持item shortcuts 和item icons。
需要做的是重写如下几个回调方法:
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
// TODO Auto-generated method stub
return super.onMenuItemSelected(featureId, item);
}
然后还需要调用Activity的registerForContextMenu方法,来注册触发ContextMenu的View。
下面是一个小例子:
public class HelloWorldActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = (TextView) findViewById(R.id.text);
//注册触发ContextMenu的View
this.registerForContextMenu(tv);
/**
* 如果取消下面这段代码的注释,因为重写了tv的长按事件,并且其长按事件的返回值为true,
* 所以长按tv控件不会触发ContextMenu
* */
// tv.setOnLongClickListener(new View.OnLongClickListener() {
//
// public boolean onLongClick(View v) {
// return true;
// }
// });
}
/**
* 当控件触发ContextMenu显示的时候,调用此方法。
* */
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
//设置ContextMenu的标题
menu.setHeaderTitle("ContextMenuTest");
//设置ContextMenu的标题图标
menu.setHeaderIcon(R.drawable.ic_launcher);
//添加条目
menu.add(1, 0, 0, "Item0");
menu.add(1, 1, 0, "Item1");
menu.add(1, 2, 0, "Item2");
super.onCreateContextMenu(menu, v, menuInfo);
}
/**
* 处理ContextMenu的item点击事件
* */
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) {
case 0:
case 1:
case 2:
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
break;
}
return super.onMenuItemSelected(featureId, item);
}
}
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:id="@+id/text"/>
</LinearLayout>
3)获取屏幕的宽和高
getWindowManager().getDefaultDisplay().getWidth();
getWindowManager().getDefaultDisplay().getHeight();
4)标题栏ProgressBar
在使用时我们首先需要在setContentView之前声明
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
在需要显示进度时调用 :
setProgressBarIndeterminateVisibility(true);
停止时调用:
setProgressBarIndeterminateVisibility(false);
效果如图:
5)触发menu键
openOptionsMenu();