اليوم سنتعلم حول زر التبديل والمفتاح في تطبيق Android. سنناقش ونقوم بتنفيذ واجهة مستخدم لزر التبديل وواجهة مستخدم لعنصر ToggleButton
في تطبيقنا.
زر التبديل في Android
يتم استخدام زر التبديل في Android لعرض حالة التشغيل والإيقاف على زر. المفتاح (Switch) هو نوع آخر من أزرار التبديل يُستخدم بشكل رئيسي منذ Android 4.0. يوفر المفتاح في Android تحكمًا بشكل منزلق. كلا ToggleButton و Switch هما فصول فرعية من الفئة CompoundButton
. توضح السمات XML المستخدمة لتعريف زر التبديل أدناه.
android:disabledAlpha
: الشفافية المطبقة على المؤشر عند التعطيلandroid:textOff
: النص للزر عندما لا يتم التحقق منهandroid:textOn
: النص للزر عند التحقق منه
لتعديل زر التبديل برمجيًا، يُستخدم الأساليب التالية.
CharSequence getTextOff()
: تُرجع النص عندما يكون الزر غير محددCharSequence getTextOn()
: تُرجع النص عندما يكون الزر محددًاvoid setChecked(boolean checked)
: تغيير حالة التحقق من هذا الزر
مفتاح Android
مفتاح Android أو عنصر واجهة المستخدم الخاص بـ SwitchCompat (جزء من مكتبة AppCompat التي توفر التوافق الخلفي لإصدارات Android الأقدم حتى إصدار Android API v7) هو مُنزلق مخصص للتشغيل والإيقاف يُستخدم عادة في إعدادات الهاتف. مزايا عنصر واجهة المستخدم الخاص بـ Android Switch:
- يعتبر أفضل بديل لخانات الاختيار وأزرار الراديو
- يستغرق تنفيذه أقل من دقيقة فقط
- لا حاجة لاستخدام الكثير من الرسومات والموارد الأخرى
يتم توفير تخطيط xml لـ SwitchCompat أدناه:
<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
في هذا التطبيق، سنعرض زوجين من أزرار التبديل وزر واحد للتشغيل/الإيقاف. يتم عرض حالة أزرار التبديل في SnackBar عند الضغط على FloatingActionButton
. يُغيّر حالة زر التبديل إلى صحيحة كلما تم النقر على زر العمل في شريط الإعلام أو يتم عرض الحالة في شريط الإعلام عن طريق تحريك المفتاح.
هيكل مشروع Android Toggle Button و Switch
كود Android Toggle Button
يظل activity_main.xml
كما هو. يحتوي content_main.xml
على زرين Toggle ومفتاح تبديل (Switch) محددان على 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) {
// قم بالتعامل مع نقرات عناصر شريط الأدوات هنا. سيتعامل شريط الأدوات
// تلقائيًا مع النقرات على زر الصفحة الرئيسية/الرجوع، طالما
// حددت نشاطًا أم-parent في AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
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 Switch و Toggle Button
المرجع: توغل بن الروبوت الوثائق
Source:
https://www.digitalocean.com/community/tutorials/android-toggle-button-switch-example