2022年7月21日 星期四

Android Studio - Options Menu 選單內增加 CheckBox(九十一)

Android Studio - Options Menu 選單內增加 CheckBox(九十一):

在 Options Menu 可以加入 CheckBox(複選框)控制元件作為選項,當一個 checkable 菜單項被選擇時,系統調用相應的回調方法(比如 onOptionsItemSelected()),在這個方法中必須指定 checkbox 的狀態.因爲一個 checkbox 或 radio 按鈕不會自動改變其狀態,但可以使用 isChecked() 查詢菜單項的當前狀態,並可使用 setChecked() 來設置 CheckBox 狀態。

Android Studio Options Menu 選單內增加 CheckBox
  • 操作系統:Windows 7 64-bit 版本
  • 開發環境:Android Studio 4.0.1 版本
  • Gradle 版本:6.1.1
  • 手機測試版本:API 19
  • 原程式:C:\DIY-Android-181-16 OptionsMenuCheckbox bugworkshop
  • 程式:C:\DIY-Android-181-16 OptionsMenuCheckbox bugworkshop

group 指定 checkableBehavior 屬性:

屬性

說明

single

組中只有一個項目可以選中(選項按鈕)

all

所有項目均可選中(核取方塊)

none

所有項目均無法選中


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:title="Setting">

        <menu>

            <group

                android:id="@+id/checkable_group"

                android:checkableBehavior="all">

                <!-- Notice how these items inherit from the group. -->

                <item

                    android:id="@+id/checkable_item_1"

                    android:title="item_1" />

                <item

                    android:id="@+id/checkable_item_2"

                    android:checked="true"

                    android:title="item_2" />

                <item

                    android:id="@+id/checkable_item_3"

                    android:checked="true"

                    android:title=" item_3" />

            </group>

        </menu>

    </item>

 

    <item

        android:id="@+id/nongroup_checkable_item_1"

        android:checkable="true"

        android:title="Checkbox1" />

    <item

        android:id="@+id/nongroup_checkable_item_2"

        android:checkable="true"

        android:checked="true"

        android:title="Checkbox2" />

 

    <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 android.os.Bundle;

 

import android.view.Menu;

import android.view.MenuItem;

import android.widget.CheckBox;

import android.widget.Toast;

 

public class MainActivity extends AppCompatActivity {

 

    private CheckBox check1;

    private CheckBox check2;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

    }

 

    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.options_menu, menu);

        return true;

    }

    @Override

    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {

            case R.id.nongroup_checkable_item_1:

                if (item.isChecked()){

                    Toast.makeText(this, "Selected Item: " + item.getTitle() + "=Checked" , Toast.LENGTH_SHORT).show();

                    item.setChecked(false); }

                else {

                    Toast.makeText(this, "Selected Item: " + item.getTitle() + "=UnChecked", Toast.LENGTH_SHORT).show();

                    item.setChecked(true); }

                return true;

 

            case R.id.action_about:

                Toast.makeText(this, "Selected Item: " +item.getTitle(), Toast.LENGTH_SHORT).show();

                return true;

            default:

                return super.onOptionsItemSelected(item);

        }

    }

}


Android Studio Options Menu 選單內增加 CheckBox

2022年 7月 21日(Thu)天氣報告
氣溫:61.0°F / 16.0°C @ 07:00
風速:每小時 6公里
降雨機會:2%
相對濕度:百分之 79%
天氣:大致晴朗

2022年7月20日 星期三

Android Studio - Menu 選單內增加 SubMenu 子選單(九十)

Android Studio - Menu 選單內增加 SubMenu 子選單(九十):

SubMenu(子選單),android 中點擊子功能表將彈出一個顯示子功能表項的懸浮框, 子功能表不支持嵌套,即不能包括其他子功能表。

Android Studio Menu 選單內增加 SubMenu 子選單
  • 操作系統:Windows 7 64-bit 版本
  • 開發環境:Android Studio 4.0.1 版本
  • Gradle 版本:6.1.1
  • 手機測試版本:API 19
  • 原程式:C:\DIY-Android-181-13 OptionsMenuSubMenu bugworkshop
  • 程式:C:\DIY-Android-181-13 OptionsMenuSubMenu bugworkshop

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" >

 

        <menu>

        <item

           android:id="@+id/action_setting1"

            android:orderInCategory="100"

            android:title="Setting1"

            android:icon="@android:drawable/ic_menu_set_as"

            app:showAsAction="never" />

 

        <item

            android:id="@+id/action_setting2"

            android:orderInCategory="100"

            android:title="Setting2"

            android:icon="@android:drawable/ic_menu_set_as"

            app:showAsAction="never" />

        </menu>

 

    </item>

 

    <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 選單內增加 SubMenu 子選單

2022年 7月 20日(Wed)天氣報告
氣溫:63.0°F / 17.0°C @ 07:00
風速:每小時 0公里
降雨機會:2%
相對濕度:百分之 73%
天氣:晴

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%
天氣:晴