Android學習(八)—— Android選單
Android 選單
我們繼續來進行學習,今天寫一下在軟體中用的還算較多的選單。
1、Menu
選單,很顯然,作用就是點選不同的選項觸發不同的方法。現在在安卓使用中推薦使用ActionBar,但這裡我們還是對選單進行一個簡單的解釋。
選單主要分為三類,選項選單(Option Menu)、上下文選單(Context Menu)和子選單(Sub Menu),下面我們就一個一個來看一下。
(1)選項選單
當用戶單擊軟體上的選單按鈕,觸發事件彈出的選單框就是選項選單。
這是效果圖
先是佈局程式碼
佈局為在res資料夾下新建一個menu資料夾,在此資料夾下建xml檔案。
1 <?xml version="1.0" encoding="utf-8"?> 2 <menu xmlns:android="http://schemas.android.com/apk/res/android" 3xmlns:app="http://schemas.android.com/apk/res-auto"> 4<item 5android:id="@+id/mune_enter" 6android:orderInCategory="100" 7android:title="選項一" 8app:showAsAction="never"/> 9<item 10android:id="@+id/mune_setting" 11android:orderInCategory="100" 12android:title="選項二" 13app:showAsAction="never"/> 14<item 15android:id="@+id/mune_out" 16android:orderInCategory="100" 17android:title="選項三" 18app:showAsAction="never"/> 19 </menu>
解釋一下其中一些屬性
- showAsAction 主要是針對這個選單的顯示起作用的,它有三個可選項
- always:總是顯示在介面上
- never:不顯示在介面上,只讓出現在右邊的三個點中
- ifRoom:如果有位置才顯示,不然就出現在右邊的三個點中
下面是java程式碼
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //匯入選單佈局 public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } //這裡是點選選單項的觸發事件 public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.mune_enter: Toast.makeText(this, "點選選項一", Toast.LENGTH_SHORT).show(); break; case R.id.mune_setting: Toast.makeText(this, "點選選項二", Toast.LENGTH_SHORT).show(); break; case R.id.mune_out: Toast.makeText(this, "點選選項三", Toast.LENGTH_SHORT).show(); break; default: break; } return super.onOptionsItemSelected(item); } }
(2)上下文選單
當用戶長按Activity頁面時,彈出的選單被稱為上下文選單。一般情況下ContextMenu常用於ListView或者GridView。
效果圖
先是佈局檔案
這裡的佈局就是下載layout中,父佈局為FrameLayout
1 <?xml version="1.0" encoding="utf-8"?> 2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 3android:id="@+id/container" 4android:layout_width="match_parent" 5android:layout_height="match_parent"> 6 7<ListView 8android:id="@+id/mune_list" 9android:layout_width="wrap_content" 10android:layout_height="wrap_content" > 11</ListView> 12 13 </FrameLayout>
這裡沒什麼要說的,直接看下面。
java程式碼
public class MainActivity extends AppCompatActivity { private ListView listview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //載入資料 showListView(); // 註冊上下文選單 this.registerForContextMenu(listview); } //載入資料 private void showListView() { listview = (ListView) findViewById(R.id.mune_list); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, getDate()); listview.setAdapter(adapter); } //建立資料來源 private ArrayList<String> getDate() { ArrayList<String> list = new ArrayList<String>(); for (int i = 0; i < 10; i++) { list.add("選單" + i); } return list; } //新增上下文選單的選單項 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { menu.setHeaderTitle("上下文選單"); //載入上下文選單內容 menu.add(1, 1, 1, "選項一"); menu.add(1, 2, 1, "選項二"); menu.add(1, 3, 1, "選項三"); super.onCreateContextMenu(menu, v, menuInfo); } //建立單擊事件 public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case 1: Toast.makeText(this, "點選選項一", Toast.LENGTH_SHORT).show(); break; case 2: Toast.makeText(this, "點選選項二", Toast.LENGTH_SHORT).show(); break; case 3: Toast.makeText(this, "點選選項三", Toast.LENGTH_SHORT).show(); break; default: break; } return super.onContextItemSelected(item); } }
(3)子選單
它就是將功能相同的操作進行分組顯示,作用在選項選單上,是選項選單的二級選單
效果圖
先上佈局檔案
其實佈局檔案中可以什麼都沒有
1 <?xml version="1.0" encoding="utf-8"?> 2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 3android:id="@+id/container" 4android:layout_width="match_parent" 5android:layout_height="match_parent"> 6 7<TextView 8android:layout_width="wrap_content" 9android:layout_height="wrap_content" 10android:text="SubMenu" 11android:textSize="20dp" /> 12 13 </FrameLayout>
然後是java程式碼
1 public class MainActivity extends AppCompatActivity { 2 3@Override 4protected void onCreate(Bundle savedInstanceState) { 5super.onCreate(savedInstanceState); 6setContentView(R.layout.activity_main); 7} 8@Override 9public boolean onCreateOptionsMenu(Menu menu) { 10SubMenu fileMenu = menu.addSubMenu("檢視"); 11SubMenu editMenu = menu.addSubMenu("輸入"); 12//新增選單項 13fileMenu.add(1, 1, 1, "檢視1"); 14fileMenu.add(1, 2, 1, "檢視2"); 15fileMenu.add(1, 3, 1, "檢視3"); 16editMenu.add(2, 1, 1, "輸入1"); 17editMenu.add(2, 2, 1, "輸入2"); 18editMenu.add(2, 3, 1, "輸入3"); 19return super.onCreateOptionsMenu(menu); 20} 21//建立點選事件 22public boolean onOptionsItemSelected(MenuItem item) { 23if (item.getGroupId() == 1) { 24switch (item.getItemId()) { 25case 1: 26Toast.makeText(this, "點選了檢視1", Toast.LENGTH_SHORT).show(); 27break; 28case 2: 29Toast.makeText(this, "點選了檢視2", Toast.LENGTH_SHORT).show(); 30break; 31case 3: 32Toast.makeText(this, "點選了檢視3", Toast.LENGTH_SHORT).show(); 33break; 34default: 35break; 36} 37} else if (item.getGroupId() == 2) { 38switch (item.getItemId()) { 39case 1: 40Toast.makeText(this, "點選了輸入1", Toast.LENGTH_SHORT).show(); 41break; 42case 2: 43Toast.makeText(this, "點選了輸入2", Toast.LENGTH_SHORT).show(); 44break; 45case 3: 46Toast.makeText(this, "點選了輸入3", Toast.LENGTH_SHORT).show(); 47break; 48default: 49break; 50} 51} 52return super.onOptionsItemSelected(item); 53} 54 }
上面就是選單的用法了。。。。。。。
說一下ContextMenu與OptionMenu的區別:
- 1、OptionMenu對應的是activity,一個activity只能擁有一個選項選單;
- 2、ContextMenu對應的是view,每個view都可以設定上下文選單;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~