今天我們將學習有關 Android 應用程序中的 Android 切換按鈕和開關的知識。我們將討論並實現應用程序中的 Switch 按鈕小部件和 ToggleButton 小部件。
Android 切換按鈕
Android 切換按鈕用於在按鈕上顯示開啟和關閉狀態。Switch是另一種切換按鈕類型,自 Android 4.0 起廣泛使用。Android Switch 提供滑塊控制。ToggleButton 和 Switch 都是 CompoundButton
類的子類。用於定義 ToggleButton 的 XML 屬性如下。
android:disabledAlpha
:在禁用時應用於指示器的 alpha 值android:textOff
:按鈕未選中時的文本android:textOn
:按鈕選中時的文本
通過編程方式修改 ToggleButton 使用以下方法。
CharSequence getTextOff()
:返回按鈕處於未選中狀態時的文本CharSequence getTextOn()
:返回按鈕處於選中狀態時的文本void setChecked(boolean checked)
:更改此按鈕的選中狀態
Android 開關
Android 開關或 SwitchCompat 小部件(AppCompat 库的一部分,提供了对低至 Android API v7 的较低版本的向后兼容性)是一种常见的自定义开关,通常在手机设置中可见。Android 開關小部件的優勢:
- 它是复选框和单选按钮的最佳替代品
- 实现只需要不到一分钟
- 无需使用太多的可绘制资源和其他资源
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.
Source:
https://www.digitalocean.com/community/tutorials/android-toggle-button-switch-example