1,Menu
菜单的分类;OptionsMenu 绑定在系统上,不用自己收到注册.
ContextMenu,PopupMenu
绑定到控件上,需要进行注册.
使用菜单的步骤
1.在res--->menu创建布局代码如下
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never"/>
//这是是一个二级菜单
<item
android:id="@+id/item1"
android:orderInCategory="2"
android:title="item1"
app:showAsAction="never"
>
<menu>
<item
android:id="@+id/item4"
android:title="item4"
/>
<item
android:id="@+id/item5"
android:title="item5"
/>
<item
android:id="@+id/item6"
android:title="item6"
/>
</menu>
</item>
//以上是一个二级的菜单
<item
android:id="@+id/item2"
android:orderInCategory="3"
android:title="item2"
app:showAsAction="never"
/>
<item
android:id="@+id/item3"
android:orderInCategory="4"
android:title="item4"
app:showAsAction="never"
/>
</menu>
2.就是在java的代码中把xml文件的布局加载到菜单项上代码如下
1.OptionsMenu的加载和点击事件代码如下
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
<pre name="code" class="java"> @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.item1:
Toast.makeText(this, item.getTitle().toString(), Toast.LENGTH_SHORT).show();
break;
case R.id.item2:
Toast.makeText(this, item.getTitle().toString(), Toast.LENGTH_SHORT).show();
break;
case R.id.item3:
Toast.makeText(this, item.getTitle().toString(), Toast.LENGTH_SHORT).show();
break;
case R.id.action_settings:
Toast.makeText(this, item.getTitle().toString(), Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
2. ContextMenu上下文菜单的加载和点击事件的代码如下
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
getdata();
adapter = new ArrayAdapter<List<String>>(MainActivity.this, android.R.layout.simple_list_item_1);
adapter.add(list);
lv.setAdapter(adapter);
//将上下文菜单注册到listview上
registerForContextMenu(lv);
}
public void getdata() {
list = new ArrayList<>();
for (int i = 0; i < 40; i++) {
list.add("item" + i);
}
}
/**
*
* @param menu
* @param v
* @param menuInfo
*/
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
//把xml文件里的布局加载到menu上
getMenuInflater().inflate(R.menu.menu_main, menu);
}
<pre name="code" class="java"> @Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.item1:
AdapterView.AdapterContextMenuInfo adapterContextMenuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
list.remove(adapterContextMenuInfo.position);
adapter.notifyDataSetChanged();
Toast.makeText(this, "删除", Toast.LENGTH_SHORT).show();
break;
case R.id.item2:
Toast.makeText(this, "分享", Toast.LENGTH_SHORT).show();
break;
}
return super.onContextItemSelected(item);
}
}
3. PopupMenu的加载和点击事件的代码如下
public void onclick(View view) {
PopupMenu popupMenu = new PopupMenu(this, view);
getMenuInflater().inflate(R.menu.menu_main, popupMenu.getMenu());
popupMenu.show();
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.item1:
Toast.makeText(MainActivity.this, item.getTitle().toString(),Toast.LENGTH_SHORT).show();
break;
case R.id.item2:
Toast.makeText(MainActivity.this, item.getTitle().toString(),Toast.LENGTH_SHORT).show();
break;
}
return false;
}
});
}
}
但是在安卓引入
ActionBar之后就很少使用了.以后还会写关于
ActionBar的使用..