Android 切換按鈕,開關示例

今天我們將學習有關 Android 應用程序中的 Android 切換按鈕和開關的知識。我們將討論並實現應用程序中的 Switch 按鈕小部件和 ToggleButton 小部件。

Android 切換按鈕

Android 切換按鈕用於在按鈕上顯示開啟和關閉狀態。Switch是另一種切換按鈕類型,自 Android 4.0 起廣泛使用。Android Switch 提供滑塊控制。ToggleButton 和 Switch 都是 CompoundButton 類的子類。用於定義 ToggleButton 的 XML 屬性如下。

  1. android:disabledAlpha:在禁用時應用於指示器的 alpha 值
  2. android:textOff:按鈕未選中時的文本
  3. android:textOn:按鈕選中時的文本

通過編程方式修改 ToggleButton 使用以下方法。

  1. CharSequence getTextOff():返回按鈕處於未選中狀態時的文本
  2. CharSequence getTextOn():返回按鈕處於選中狀態時的文本
  3. void setChecked(boolean checked):更改此按鈕的選中狀態

Android 開關

Android 開關或 SwitchCompat 小部件(AppCompat 库的一部分,提供了对低至 Android API v7 的较低版本的向后兼容性)是一种常见的自定义开关,通常在手机设置中可见。Android 開關小部件的優勢:

  1. 它是复选框和单选按钮的最佳替代品
  2. 实现只需要不到一分钟
  3. 无需使用太多的可绘制资源和其他资源

SwitchCompat 的 XML 布局如下:

<android.support.v7.widget.SwitchCompat
        android:id="@+id/switchButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Switch example"
        />

android:text 用于显示滑动开关按钮旁边的文本。

Android 切換按鈕和開關示例

在此应用程序中,我们将显示两个 ToggleButton 和一个 Switch 按钮。 当按下 FloatingActionButton 时,将在 SnackBar 中显示 Toggle Buttons 的状态。 单击 snackbar 的操作按钮时,将 Switch 按钮的状态更改为 true。 或者通过滑动开关在 snackbar 中显示状态。

Android 切換按鈕和開關專案結構

Android 切換按鈕程式碼

activity_main.xml 保持不變。 content_main.xml 包含兩個切換按鈕和一個預設為 false 的開關,如下方程式碼片段所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.journaldev.switchandtoggle.MainActivity"
    tools:showIn="@layout/activity_main">

    <ToggleButton
        android:id="@+id/tb1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="ToggleButton 1"
        android:textOff="Off"
        android:textOn="On" />

    <ToggleButton
        android:id="@+id/tb2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/tb1"
        android:layout_alignBottom="@+id/tb1"
        android:layout_toRightOf="@+id/tb1"
        android:text="ToggleButton 2"
        android:textOff="Off"
        android:textOn="On" />

    <android.support.v7.widget.SwitchCompat
        android:id="@+id/switchButton"
        android:layout_width="wrap_content"
        android:layout_centerInParent="true"
        android:checked="false"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Switch example"
        />


</RelativeLayout>

給出 MainActivity.java 如下:

package com.journaldev.switchandtoggle;

import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SwitchCompat;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.CompoundButton;
import android.widget.ToggleButton;

public class MainActivity extends AppCompatActivity {

    ToggleButton tb1, tb2;
    SwitchCompat switchCompat;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                StringBuilder result = new StringBuilder();
                result.append("ToggleButton1 : ").append(tb1.getText());
                result.append("\nToggleButton2 : ").append(tb2.getText());

               Snackbar snackbar= Snackbar.make(view, result.toString(), Snackbar.LENGTH_LONG)
                        .setAction("SWITCH ENABLE", new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                switchCompat.setChecked(true);
                            }
                        });

                snackbar.setActionTextColor(Color.RED);
                snackbar.show();
            }
        });

        tb1= (ToggleButton)findViewById(R.id.tb1);
        tb2=(ToggleButton)findViewById(R.id.tb2);
        switchCompat=(SwitchCompat)findViewById(R.id.switchButton);

        switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                Snackbar.make(buttonView, "Switch state checked "+isChecked, Snackbar.LENGTH_LONG)
                        .setAction("ACTION",null).show();
            }
        });



    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // 嵌入菜單;如果存在,則將項目添加到操作欄。
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // 在此處處理操作欄項目點擊。只要在 AndroidManifest.xml 中指定了父活動,操作欄就會
        // 自動處理首頁/上一步按鈕上的點擊。
        
        int id = item.getItemId();

        
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

A String builder is used to get the current state of the toggle buttons and append them to display in the snackbar. Switch button being a subclass of Compound Button, an OnCheckChangeListener is implemented as shown in the code above. The output below is the app in action. This brings an end to android toggle button and switch in android tutorial. You can download the final Android SwitchAndToggle Project from the link below.

下載 Android 開關和切換按鈕專案

參考:ToggleButton Android 文件

Source:
https://www.digitalocean.com/community/tutorials/android-toggle-button-switch-example