### 1、選項菜單(OptionsMenu):
(1)創建選項菜單:重寫onCreateOptionsMenu(Menu menu):?? ??1)通過xml設置MenuInflater.inflate(); ? ? ?2)動態設置;
(2)設置菜單項點擊事件:onOptionsItemSelected();
(3)通過xml設置MenuInflater.inflate();
? ? ? ? ?res ——> menu ——>main.xml
~~~
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_settings1"
android:orderInCategory="100"
android:showAsAction="never"
android:title="菜單一"/>
<item
android:id="@+id/action_settings2"
android:orderInCategory="100"
android:showAsAction="never"
android:title="菜單二"/>
</menu>
~~~
? ? ? ? ? ?MainActivity.java
~~~
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
// 創建選項菜單
// (1)通過xml設置MenuInflater.inflate();
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
// 設置菜單項點擊事件:onOptionsItemSelected();
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.action_settings1:
Toast.makeText(this, "點擊了菜單項一", Toast.LENGTH_SHORT).show();
break;
case R.id.action_settings2:
Toast.makeText(this, "點擊了菜單項二", Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
~~~
(4)動態添加菜單項
? ? ? ? ?MainActivity.java
~~~
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//menu.add(groupId, itemId, order, title):返回值是MenuItem
//(2)動態設置
MenuItem menuItem = menu.add(1, 100, 1, "菜單一");
menuItem.setTitle("Menu一");
menuItem.setIcon(R.drawable.ic_launcher); //API>=11時不顯示圖標
menu.add(1, 101, 2, "菜單二");
menu.add(1, 102, 3, "菜單三");
menu.add(1, 103, 4, "菜單四");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case 100:
Intent intent=new Intent(MainActivity.this,Menu1.class);
item.setIntent(intent); //設置點擊跳轉頁面
Toast.makeText(this, "點擊了菜單項一", Toast.LENGTH_SHORT).show();
break;
case 101:
Toast.makeText(this, "點擊了菜單項二", Toast.LENGTH_SHORT).show();
break;
case 102:
Toast.makeText(this, "點擊了菜單項三", Toast.LENGTH_SHORT).show();
break;
case 103:
Toast.makeText(this, "點擊了菜單項四", Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
~~~
### 2、上下文菜單(ContextMenu)
在一個Activity里面只有一個“選項菜單”,它是針對整個Activity的。如果長按Activity里面的某個View(ListView、GridView等),也會彈出一個菜單操作,這個就是上下文菜單。
(1)創建方法:
1)首先給View(ListView、GridView等)注冊上下文菜單registerForContextMenu();
2)添加上下文菜單內容onCreateContextMenu(); ?A.通過加載xml文件中的菜單項; ? B.通過代碼動態添加;
3)設置菜單點擊后的響應事件:onContextItemSelected();
~~~
public class MainActivity extends Activity {
private ListView listView;
private SimpleAdapter simpleAdapter;
private List<Map<String, Object>> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);
data = new ArrayList<Map<String, Object>>();
simpleAdapter = new SimpleAdapter(this, getData(), R.layout.item,
new String[] { "image", "text" }, new int[] { R.id.imageView,
R.id.textView });
listView.setAdapter(simpleAdapter);
// 為ListVIew注冊上下文菜單
this.registerForContextMenu(listView);
}
private List<Map<String, Object>> getData() {
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("image", R.drawable.calendar);
map1.put("text", "日歷");
data.add(map1);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("image", R.drawable.camera);
map2.put("text", "照相機");
data.add(map2);
Map<String, Object> map3 = new HashMap<String, Object>();
map3.put("image", R.drawable.clock);
map3.put("text", "時鐘");
data.add(map3);
Map<String, Object> map4 = new HashMap<String, Object>();
map4.put("image", R.drawable.games_control);
map4.put("text", "游戲");
data.add(map4);
Map<String, Object> map5 = new HashMap<String, Object>();
map5.put("image", R.drawable.world);
map5.put("text", "地圖");
data.add(map5);
return data;
}
//選項菜單
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
return super.onCreateOptionsMenu(menu);
}
// 重寫上下文菜單
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.setHeaderTitle("應用程序擴展操作");
menu.setHeaderIcon(R.drawable.ic_launcher);
//動態添加菜單項
//menu.add(1, 100, 1, "粘貼");
//menu.add(1, 101, 1, "復制");
//menu.add(1, 102, 1, "剪切");
//menu.add(1, 103, 1, "重命名");
//通過XML加載菜單項
MenuInflater inflater=getMenuInflater();
inflater.inflate(R.menu.main_context, menu);
}
// 設置上下文菜單的點擊事件
@Override
public boolean onContextItemSelected(MenuItem item) {
// TODO Auto-generated method stub
/*switch (item.getItemId()) {
case 100:
Toast.makeText(MainActivity.this, "點擊了粘貼", Toast.LENGTH_SHORT).show();
break;
case 101:
Toast.makeText(MainActivity.this, "點擊了復制", Toast.LENGTH_SHORT).show();
break;
case 102:
Toast.makeText(MainActivity.this, "點擊了剪切", Toast.LENGTH_SHORT).show();
break;
case 103:
Toast.makeText(MainActivity.this, "點擊了重命名", Toast.LENGTH_SHORT).show();
break;
}*/
switch (item.getItemId()) {
case R.id.action_settings1:
Toast.makeText(MainActivity.this, "點擊了粘貼", Toast.LENGTH_SHORT).show();
break;
case R.id.action_settings2:
Toast.makeText(MainActivity.this, "點擊了復制", Toast.LENGTH_SHORT).show();
break;
case R.id.action_settings3:
Toast.makeText(MainActivity.this, "點擊了剪切", Toast.LENGTH_SHORT).show();
break;
case R.id.action_settings4:
Toast.makeText(MainActivity.this, "點擊了重命名", Toast.LENGTH_SHORT).show();
break;
}
return super.onContextItemSelected(item);
}
}
~~~
### 3、子菜單(SubMenu)
res——》menu——》main.xml(子菜單的布局方法)
~~~
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:showAsAction="never"
android:title="文件">
<menu >
<item
android:id="@+id/new_file"
android:showAsAction="never"
android:title="新建"/>
<item
android:id="@+id/open_file"
android:showAsAction="never"
android:title="打開"/>
<item
android:id="@+id/save_file"
android:showAsAction="never"
android:title="保存"/>
<item
android:id="@+id/rename_file"
android:showAsAction="never"
android:title="重命名"/>
</menu>
</item>
<item
android:showAsAction="never"
android:title="編輯">
<menu >
<item
android:id="@+id/v_file"
android:showAsAction="never"
android:title="粘貼"/>
<item
android:id="@+id/c_edit"
android:showAsAction="never"
android:title="復制"/>
<item
android:id="@+id/x_edit"
android:showAsAction="never"
android:title="剪切"/>
<item
android:id="@+id/rename_edit"
android:showAsAction="never"
android:title="重命名"/>
</menu>
</item>
</menu>
~~~
MainActivity.java(以下代碼將動態添加子菜單注釋起來了)
~~~
package com.example.testsubmenu;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.SubMenu;
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);
//動態添加子菜單項
/*SubMenu subMenu1 = menu.addSubMenu("文件");
SubMenu subMenu2 = menu.addSubMenu("編輯");
subMenu1.setHeaderTitle("文件操作");
subMenu1.setHeaderIcon(R.drawable.ic_launcher);
subMenu1.add(1, 100, 1, "新建");
subMenu1.add(1, 101, 1, "打開");
subMenu1.add(1, 102, 1, "保存");
subMenu1.add(1, 103, 1, "重命名");
subMenu2.setHeaderTitle("編輯操作");
subMenu2.setHeaderIcon(R.drawable.ic_launcher);
subMenu2.add(2, 100, 1, "粘貼");
subMenu2.add(2, 101, 1, "復制");
subMenu2.add(2, 102, 1, "剪切");
subMenu2.add(2, 103, 1, "重命名");*/
//通過加載XML靜態加載子菜單
MenuInflater menuInflater=getMenuInflater();
menuInflater.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
//動態的點擊事件
/*if (item.getGroupId()==1) {
switch (item.getItemId()) {
case 100:
Toast.makeText(this, "點擊了新建", Toast.LENGTH_SHORT).show();
break;
case 101:
Toast.makeText(this, "點擊了打開", Toast.LENGTH_SHORT).show();
break;
case 102:
Toast.makeText(this, "點擊了保存", Toast.LENGTH_SHORT).show();
break;
case 103:
Toast.makeText(this, "點擊了重命名", Toast.LENGTH_SHORT).show();
break;
}
}
else {
switch (item.getItemId()) {
case 100:
Toast.makeText(this, "點擊了粘貼", Toast.LENGTH_SHORT).show();
break;
case 101:
Toast.makeText(this, "點擊了復制", Toast.LENGTH_SHORT).show();
break;
case 102:
Toast.makeText(this, "點擊了剪切", Toast.LENGTH_SHORT).show();
break;
case 103:
Toast.makeText(this, "點擊了重命名", Toast.LENGTH_SHORT).show();
break;
}
}*/
//靜態的點擊事件
switch (item.getItemId()) {
case R.id.new_file:
Toast.makeText(this, "點擊了新建", Toast.LENGTH_SHORT).show();
break;
case R.id.open_file:
Toast.makeText(this, "點擊了打開", Toast.LENGTH_SHORT).show();
break;
case R.id.save_file:
Toast.makeText(this, "點擊了保存", Toast.LENGTH_SHORT).show();
break;
case R.id.rename_file:
Toast.makeText(this, "點擊了重命名", Toast.LENGTH_SHORT).show();
break;
case R.id.v_file:
Toast.makeText(this, "點擊了粘貼", Toast.LENGTH_SHORT).show();
break;
case R.id.c_edit:
Toast.makeText(this, "點擊了復制", Toast.LENGTH_SHORT).show();
break;
case R.id.x_edit:
Toast.makeText(this, "點擊了剪切", Toast.LENGTH_SHORT).show();
break;
case R.id.rename_edit:
Toast.makeText(this, "點擊了重命名", Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
}
~~~
- 前言
- Java內部類
- 從一個View向一個Activity跳轉
- Android 與 SQLite
- Android工程A依賴B,B依賴C
- Android重要控件概覽(上)
- Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
- Android布局概覽
- 動態引用APK文件
- Android重要控件概覽(中)
- Android重要控件概覽(下)
- Gallery和ImageSwitcher
- Android之Toast
- Android之Dialog
- Android之Notification
- Android之Menu
- Android Menu中android:showAsAction屬性
- Android SharedPreferences存儲數據的使用方法
- Android手勢識別之GestureDetector
- 不同APP通過SharedPreferences傳遞數據(共享數據)
- 一個自定義的Topbar模板
- 關于Activity回收造成View選中不對應的問題
- Android之Fragment靜態加載