2022年7月19日 星期二

Android Studio - Menu 選單內增加入選項(八十九)

Android Studio - Menu 選單內增加入選項(八十九):

在 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

功能表項目的顯示方式。常用的有ifRoomneveralwayswithText,多個屬性值之間可以使用|隔開。


showAsAction 常用的屬性:

屬性

說明

ifRoom

根據屏幕自行去適應,應顯示的Icon數量,多餘的會隱藏在 Menu裡面

always

不管屏幕寬,直接顯示在應用欄位上面,不隱藏

withText

一般搭配ifRoomapp: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 選單內增加入選項

2022年 7月 19日(Tue)天氣報告
氣溫:58.0°F / 14.0°C @ 07:00
風速:每小時 3公里
降雨機會:2%
相對濕度:百分之 81%
天氣:晴

沒有留言:

張貼留言