1.OptionsMenu按键菜单:
资源文件下的menu目录下的menu.xml文件:
<span style="font-size:18px;"><menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_settings"/>
<!-- id,展示的内容,展示的图标(4.0以后需添加一个方法才可用),展示的顺序,展示的位置 -->
<item
android:id="@+id/back"
android:icon="@drawable/ic_launcher"
android:orderInCategory="4"
android:showAsAction="never"
android:title="返回"/>
<!--
android:showAsAction=""
never:从不展示到actionbar上
ifrom:actionbar若有位置就展示,没有的话隐藏
always:总是展示到actionbar上
withText:文本和其他的选项一起使用
collapseActionView:
-->
<item
android:id="@+id/text"
android:orderInCategory="5"
android:showAsAction="withText"
android:title="文本">
<menu>
<item
android:id="@+id/item1"
android:title="新建"/>
<item
android:id="@+id/item2"
android:title="打开"/>
</menu>
</item>
</menu></span>
主逻辑代码文件:
<span style="font-size:18px;">package com.example.day11_optionsmemu;
import java.lang.reflect.Method;
import com.example.day11_memu.R;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
/*
* 组的id
* item的id
* 展示的顺序
* 展示的内容
*/
menu.add(menu.NONE,1,1,"添加");
menu.add(menu.NONE,2,6,"退出");
setIconEnable(menu,true);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId())
{
case 1:
Toast.makeText(MainActivity.this,item.getTitle().toString(),0).show();
break;
case R.id.back:
Toast.makeText(MainActivity.this,item.getTitle().toString(),0).show();
break;
case R.id.text:
Toast.makeText(MainActivity.this,item.getTitle().toString(),0).show();
break;
case R.id.item1:
Toast.makeText(MainActivity.this,item.getTitle().toString(),0).show();
break;
case R.id.item2:
Toast.makeText(MainActivity.this,item.getTitle().toString(),0).show();
break;
case 6:
Toast.makeText(MainActivity.this,item.getTitle().toString(),0).show();
break;
}
return super.onOptionsItemSelected(item);
}
private void setIconEnable(Menu menu,boolean enable)
{
try
{
Class<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");
Method m=clazz.getDeclaredMethod("setOptionalIconsVisible",boolean.class);
m.setAccessible(true);
m.invoke(menu, enable);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
</span>
2.ContextMenu上下文菜单:
资源文件下的menu目录下的自荐的menu2.xml文件:
<span style="font-size:18px;"> <menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/delete"
android:title="删除"/>
<item
android:id="@+id/share"
android:title="分享"/>
</menu></span>
主布局文件:
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
</span>
主逻辑代码文件:
<span style="font-size:18px;">package com.example.day11_contextmemu;
import java.util.ArrayList;
import java.util.List;
import com.example.day11_memu.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class Main2 extends Activity {
ListView lv;
List<String> list;
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
lv = (ListView) findViewById(R.id.lv);
adapter = new ArrayAdapter<String>(Main2.this,
android.R.layout.simple_list_item_1, getData());
lv.setAdapter(adapter);
registerForContextMenu(lv);
}
public List getData() {
list = new ArrayList<String>();
for (int i = 0; i < 10; i++) {
list.add("item" + i);
}
return list;
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.main2_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.delete:
AdapterContextMenuInfo acm = (AdapterContextMenuInfo) item
.getMenuInfo();
list.remove(acm.position);
adapter.notifyDataSetChanged();
break;
case R.id.share:
Toast.makeText(Main2.this, "分享", 0).show();
break;
}
return super.onContextItemSelected(item);
}
}
</span>
3.PopupMenu弹出式菜单
主布局文件:
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="弹出菜单"
android:onClick="click"/>
</LinearLayout>
</span>
主逻辑代码文件:与上面第二种菜单共用一个菜单布局文件
<span style="font-size:18px;">package com.example.day11_popupmemu;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.PopupMenu;
import android.widget.Toast;
import android.widget.PopupMenu.OnMenuItemClickListener;
import com.example.day11_memu.R;
import com.example.day11_optionsmemu.MainActivity;
public class Main3 extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main3);
}
@SuppressLint("NewApi") public void click(View v)
{
//参数2:锚点
PopupMenu pm = new PopupMenu(Main3.this,v);
//将菜单布局加载到菜单上
getMenuInflater().inflate(R.menu.main2_menu,pm.getMenu());
//显示菜单
pm.show();
//菜单点击事件的监听
pm.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch(item.getItemId())
{
case R.id.delete:
Toast.makeText(Main3.this,item.getTitle().toString(),0).show();
break;
case R.id.share:
Toast.makeText(Main3.this,item.getTitle().toString(),0).show();
break;
}
return false;
}
});
}
}
</span>