android基礎學習-android篇day16-Menu的使用
Menu 基礎知識
android提供的標準UI元件
-
menu 的總體概述
- menu 是 android 的一個重要元件
- menu 選單是一款比較通用的使用者體驗的元件
- 從 Android 3.0 即 API 11 之後 android 系統沒有提供單獨的選單按鈕
Menu 選單的分類
-
選項選單(Options Menu);當使用者觸發 menu 項時彈出的選單
-
上下文選單(Context Menu):使用者長按那個控制元件時彈出的類似對話方塊
-
彈出選單(Pop Menu),當使用者點選某個 View 檢視是彈出的選單
-
Menu 選單的使用
1、使用 xml 檔案載入 menu
Item 的屬性:android:id 唯一標識選單,android:title :選單項的文字
android: orderInCategory:設定同種類選單項的排列順序
android:showAsAction="never|ifroom|always" 表示是否顯示 寫好以後直接在程式碼中寫 getMenuInflator.inflate()載入進來即可
(1).選項選單
-
當使用者單擊裝置上的選單按鈕(Menu),觸發事件彈出的選單就是選項選單。選項選單最多隻有六個,超過六個第六個就會自動顯示 更多 選項來展示顯示。
-
建立方法:
覆蓋 Activity 的 onCreateOptionsMenu(Menu menu)方法,當我們第一次開啟時呼叫。
呼叫 Menu 的 add()方法新增選單項(MenuItem),可以呼叫 MenuItem 的 setIcon()方法為選單項設定圖示。
當選單項(MenuItem)被選中時,覆蓋 Acitivy 的 onOptionsMenuSelected()方法響應事件。
(2)、上下文選單
當使用者長按 Activity 頁面時,彈出的選單我們稱為上下文選單。我們經常在 Windows 中用滑鼠右鍵單擊彈出的選單就是上下文選單。
- 1) 覆蓋 Activity 的 onCreateContextMenu()方法,呼叫 Menu 的 add 方法新增選單項MenuItem
-
2) 覆蓋 onContextItemSelected()方法,響應選單單擊事件
-
3) 呼叫 registerForContextMenu()方法,為檢視註冊上下文選單
(3)子選單
子選單就是將相同功能的分組進行多級顯示的一種選單,比如,Windows 的“檔案”選單中就有“新建”,“開啟”,“關閉”等子選單。建立子選單的方法
- 1)、覆蓋 Activity 的 onCreateOptionsMenu()方法,呼叫 Menu 的 addSubMenu()方法 新增子選單項
- 2)、呼叫 SubMenu 的 add(),新增子選單項
- 3)、覆蓋 onCreateItemSelected()方法,響應選單單擊事件
4. 使用程式碼的方式載入彈出選單
1) 在 Android 中使用程式碼載入選單使用的是 menu 的 add()方法,。2) add()方法的引數需要重點掌握
5. 選項選單的點選事件
選項選單的點選事件有三種分別是如下程式碼所示:
第一種對於使用 xml 載入選單的可以使用以下兩種方式來新增點選事件onOptionsItemSelect
第二種點選事件在繼承Activity類中 onMenuItemSelect
第三種點選事件對於那些使用程式碼載入的選單可以使用以下方式新增點選事件 onMenuItemClickListener
具體使用哪一種點選事件大家個根據你實現的功能來選擇
6. Menu 選單的巢狀使用規則
-
1) Item 中可以巢狀 menu,但是不能巢狀 group
-
2) Menu 中既可以巢狀 group,又可以巢狀 item。
-
3) Group 中只能巢狀 item,不能巢狀 menu
7. 上下文選單:
上下文選單是和某一種控制元件繫結使用的,也就是說每個控制元件只有註冊了上下文選單,並且長 按時彈出的選單就是上下文選單,
- 呼叫 registerForContextMenu()方法,為檢視註冊上下文選單
- 上下文選單載入選單是通過重寫 onCreateContextMenu()來完成的,
- 上下文選單的 點選事件是通過重寫 onContextItemSelected()方法來實現的,具體程式碼如下
8.PopMenu:
- 拿到選單項是通過建立 popMenu 的物件再通過選單載入器將其載入進來的
- popMenu 的點選事件是通過 popMenu.setOnMenuItemClickListener()方法實現的。
實現程式碼如下:
寫完以後一定要注意 show(),否則不能看到
綜合案例:
通過xml佈局檔案寫menu(推薦方法) main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<!--
item:選單內容
title:選單標題
orderInCategory:選單顯示順序
-->
<!--設定font_group 的子選單-->
<item
android:id="@+id/font_group"
android:orderInCategory="1"
android:title="@string/font_name">
<menu>
<item
android:id="@+id/str_add"
android:orderInCategory="1"
android:title="@string/str_add"></item>
<item
android:id="@+id/str_sub"
android:orderInCategory="2"
android:title="@string/str_sub"></item>
</menu>
</item>
<item
android:id="@+id/str_color"
android:orderInCategory="2"
android:title="@string/str_color"></item>
<item
android:id="@+id/str_style"
android:orderInCategory="3"
android:title="@string/str_style"></item>
</menu>
佈局檔案:activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="操作字型!"
/>
</android.support.constraint.ConstraintLayout>
MainActivity.java實現
package com.demo.test;
import android.app.Activity;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
/**
* 去演示OptionsMenu的使用ø
*/
public class MainActivity extends Activity {
private TextView tv_show;
private float fontSize = 20.0f;
private static final int ITEMID = 4;//選單項id
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_show = (TextView) findViewById(R.id.tv_show);
tv_show.setTextSize(fontSize);//給字型設定預設大小
}
/**
* 表示當activity建立選單是回撥的方法
*
* @param menu
* @return true 用來顯示選單項
* false 無法顯示選單項
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//使用選單填充器MenuInflater、載入選單佈局
/**
* 1、獲得選單填充器物件
* 2、將選單項進行填充
*/
// MenuInflater inflater=getMenuInflater();
//inflater.inflate(R.menu.main,menu);
//建立選單檔案的第一種方式 xml檔案
getMenuInflater().inflate(R.menu.main, menu);
//建立選單檔案的第二種方式 程式碼建立
//add(groupId 選單項分組,ItemId 選單項id,order id 表示選單項排序,
// 選單項展示的文字)
menu.add(Menu.NONE, ITEMID, Menu.NONE, "設定字型");
//選項選單點選時處理的方法3 根據資源項選單item的id,給選單設定監聽事件
MenuItem item = menu.findItem(R.id.str_style);//直接找到選單項item的id
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
Toast.makeText(MainActivity.this, menuItem.getTitle().toString(),
Toast.LENGTH_SHORT).show();
return false;
}
});
return true;
}
/**
* 表示當選項選單的item被選中時回撥的方法
*
* @param item 表示選單項物件
* @return
*/
//選項選單點選時處理的方法1
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();//獲取當前點選資源項的d
switch (itemId) {
// case R.id.font_group://點選設定字型大小
// fontSize+=5;//每次點選加5
// tv_show.setTextSize(fontSize);
// break;
case R.id.str_color://設定字型顏色
//隨機生成顏色
int red = (int) (Math.random() * 256);
int green = (int) (Math.random() * 256);
int blue = (int) (Math.random() * 256);
tv_show.setTextColor(Color.rgb(red, green, blue));
break;
case R.id.str_add://font_group的子選單增大字型
fontSize += 5;//每次點選加5
tv_show.setTextSize(fontSize);
break;
case R.id.str_sub:////font_group的子選單減小字型
fontSize -= 5;//每次點選加5
tv_show.setTextSize(fontSize);
break;
}
return super.onOptionsItemSelected(item);
}
//選項選單點選時處理的方法2 繼承Activity中的方法
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
int itemId = item.getItemId();
//也可以通過switch來判斷是哪個選項的id
if (itemId == ITEMID)//設定字型的選單項
tv_show.setText("我是Activity第二種設定選單監聽的方式");
return super.onMenuItemSelected(featureId, item);
}
}
相關文章
- android基礎學習-android篇day16-Dialog的使用Android
- android基礎學習-android篇day17-Android Fragment(碎片)基本使用AndroidFragment
- android基礎學習-android篇day12-android的UI基礎入門AndroidUI
- android基礎學習-android篇day12-UI基礎控制元件(上)AndroidUI控制元件
- android基礎學習-android篇day13-UI基礎控制元件(下)AndroidUI控制元件
- android基礎學習-android篇day11-android的入門工具安裝流程Android
- android基礎學習-android篇day17-Activity的生命週期(轉)Android
- android基礎學習-android篇day15-相對佈局的常用屬性Android
- Android基礎知識學習Android
- android基礎學習-android篇day14-UI基礎控制元件綜合案例——點餐系統AndroidUI控制元件
- Android 面試基礎篇Android面試
- Android基礎-Activity基本使用Android
- Android面試之Java 基礎篇Android面試Java
- android基礎學習-java篇day7-step3-第三節:java字串AndroidJava字串
- android基礎學習-java篇day8-step3-第四節:java集合AndroidJava
- Android 學習筆記核心篇Android筆記
- Android 學習筆記思考篇Android筆記
- 詳解 Android 中的 IPC 機制:基礎篇Android
- Android基礎及應用 Service的使用Android
- Android 學習筆記架構篇Android筆記架構
- 深入瞭解Android藍芽Bluetooth——《基礎篇》Android藍芽
- 【Android繪圖】繪圖之基礎篇(一)Android繪圖
- Android Retrofit 2.5.0使用基礎詳解Android
- Android RxJava:基礎介紹與使用AndroidRxJava
- android基礎學習-java篇day9-step3-第五節:java執行緒AndroidJava執行緒
- Python基礎學習篇Python
- Android基礎—FragmentAndroidFragment
- Android學習—— Android佈局Android
- android基礎學習-java篇day11-綜合測試-播放器管理系統AndroidJava播放器
- Android基礎知識Android
- Android 基礎之 HandlerAndroid
- Android 繪圖基礎Android繪圖
- android基礎學習-java篇day10-step3-第六節:java輸入輸出流AndroidJava
- 【Android基礎】講講Android的事件分發機制Android事件
- Gradle For Android (一) 基礎定義與依賴管理篇GradleAndroid
- Android面試之——數學基礎知識Android面試
- Android學習筆記(建立Menu,Intent的使用)Android筆記Intent
- MySQL學習筆記【基礎篇】MySql筆記