在 Menu(選單)的選單是可以用 menu.xml 來設定,也可以用 Java 程式作增加和減少選項,當然使用 xml 來定義 Menu 比較簡潔,而且選單內容與邏輯程式分離,但用 Java 程式來定義 Menu 比較靈活,所以可以使用兩種方法配合需要來定義 Menu。
Android Studio Menu 選單內增加入選項 |
- 操作系統:Windows 7 64-bit 版本
- 開發環境:Android Studio 4.0.1 版本
- Gradle 版本:6.1.1
- 手機測試版本:API 19
- 原程式:C:\DIY-Android-181-12 OptionsMenuItem bugworkshop
- 程式:C:\DIY-Android-181-12 OptionsMenuItem bugworkshop
menu 常用的屬性:
屬性 |
說明 |
menu |
選單項目的容器 |
item |
功能表項目,用於定義MenuItem,可以嵌套<menu>元素,以便創建子功能表 |
group |
是<item>元素的不可見容器(可選)。可以使用它對功能表項目進行分組,使一組功能表項目共用可用性和可見性等屬性。 |
item 常用的屬性
屬性 |
說明 |
id |
設定功能表項目名稱為唯一標識設置ID。 |
title |
設定功能表標題。 |
alphabeticShortcut |
為功能表項目指定字元快速鍵。 |
numericShortcut |
為功能表項目指定數位快速鍵。 |
icon |
設定功能表項目圖示。 |
enabled |
設定功能表項目是否可用。 |
checkable |
設定功能表項目是否可選。 |
checked |
功能表項目是否已選中。 |
showAsAction |
功能表項目的顯示方式。常用的有ifRoom、never、always、withText,多個屬性值之間可以使用|隔開。 |
showAsAction 常用的屬性:
屬性 |
說明 |
ifRoom |
根據屏幕自行去適應,應顯示的Icon數量,多餘的會隱藏在 Menu裡面 |
always |
不管屏幕寬,直接顯示在應用欄位上面,不隱藏 |
withText |
一般搭配ifRoom,app:showAsAction="withText|ifRoom" |
collapseActionView |
由 android:actionLayout 或 android:actionViewClass搭配時使用,可收起來 |
never |
不管屏幕寬,直接隱藏在 Menu裡面 |
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" android:orientation="vertical" >
<Button android:id="@+id/btn_popup" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="pop" android:text="Popup Menu" /> </LinearLayout> |
options_menu.xml:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_search" android:orderInCategory="100" android:title="Search" android:icon="@drawable/ic_1" app:showAsAction="always|withText" />
<item android:id="@+id/action_settings" android:orderInCategory="100" android:title="Setting" android:icon="@android:drawable/ic_menu_set_as" app:showAsAction="never" />
<item android:id="@+id/action_about" android:orderInCategory="100" app:showAsAction="never" android:title="About"/>
</menu> |
MainActivity.java:
package bugworkshop.optionsmenu;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.view.menu.MenuBuilder; import android.annotation.SuppressLint; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
final private int Help= 110; final private int Version= 111;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
@SuppressLint("RestrictedApi") @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.options_menu, menu); menu.add(1,Help,4,"Help").setIcon(android.R.drawable.ic_menu_help); menu.add(1,Version,2,"Version").setIcon(android.R.drawable.ic_menu_info_details);;
if (menu instanceof MenuBuilder) ((MenuBuilder) menu).setOptionalIconsVisible(true); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { Toast.makeText(this, "Selected Item: " + item.getTitle() + " Id=" + item.getGroupId() +","+item.getItemId(), Toast.LENGTH_SHORT).show(); switch (item.getItemId()) { case R.id.action_settings: // do your code return true; case R.id.action_about: // do your code return true; default: return super.onOptionsItemSelected(item); } } } |
Android Studio Menu 選單內增加入選項 |
沒有留言:
張貼留言