Динамический переключатель в Android

Опубликовано: 10 Января, 2023

Переключатель — это виджет, используемый в приложениях для Android для выполнения операций с двумя состояниями, таких как включение или выключение. Переключатель обеспечивает функциональность, при которой пользователь может переключать настройки между включением и выключением с помощью переключателя. В этой статье мы рассмотрим, как динамически создать переключатель в Android. Пример видео приведен ниже, чтобы получить представление о том, что мы собираемся делать в этой статье.

Note: This Android article covered in both Java and Kotlin languages. 

Пошаговая реализация

Шаг 1. Создайте новый проект в Android Studio.

Чтобы создать новый проект в Android Studio, обратитесь к разделу «Как создать/запустить новый проект в Android Studio».

Шаг 2: Работа с файлом activity_main.xml

Перейдите к app > res > layout > activity_main.xml и добавьте в него приведенный ниже код. В код добавлены комментарии для более подробного ознакомления.

XML




<?xml version="1.0" encoding="utf-8"?>
<!--on below line we are creating our linear layout-->
<LinearLayout
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/idLLContainer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:layout_gravity="center"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">
</LinearLayout>

Шаг 3: Работа с файлом MainActivity

Перейдите к приложению > java > имени пакета вашего приложения > файлу MainActivity и добавьте приведенный ниже код. В код добавлены комментарии для более подробного ознакомления.

Kotlin




package com.gtappdevelopers.kotlingfgproject
 
import android.graphics.Typeface
import android.os.Bundle
import android.view.Gravity
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.Switch
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
 
class MainActivity : AppCompatActivity() {
 
    // on below line creating a variable.
    lateinit var containerLL: LinearLayout
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
 
        // on below line we are initializing our variables.
        containerLL = findViewById(R.id.idLLContainer)
 
        // on below line we are creating layout
        // params for text view.
        // and specifying width as match parent
        // and height as wrap content
        val txtLayoutParam = LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
        )
 
        // on below line we are creating
        // our dynamic text view
        val headingTV = TextView(this)
 
        // on below line we are setting
        // for our text view.
        headingTV.text = "Dynamic Switch in Android"
 
        // on below line we are updating text size.
        headingTV.textSize = 20f
 
        // on below line we are updating text color and font
        headingTV.setTextColor(resources.getColor(R.color.black))
        headingTV.typeface = Typeface.DEFAULT_BOLD
 
        // on below line we are adding padding
        headingTV.setPadding(20, 20, 20, 20)
 
        // on below line we are specifying text alignment.
        headingTV.textAlignment = TextView.TEXT_ALIGNMENT_CENTER
 
        // on below line we are adding layout
        // param for heading text view.
        headingTV.layoutParams = txtLayoutParam
 
        // on below line we are creating
        // a text view for switch status
        val statusTV = TextView(this)
 
        // on below line we are setting
        // for our text view.
        statusTV.text = "Status"
 
        // on below line we are updating text size.
        statusTV.textSize = 20f
 
        // on below line we are updating text color and font
        statusTV.setTextColor(resources.getColor(R.color.black))
        statusTV.typeface = Typeface.DEFAULT_BOLD
 
        // on below line we are adding padding
        statusTV.setPadding(20, 20, 20, 20)
 
        // on below line we are specifying text alignment.
        statusTV.textAlignment = TextView.TEXT_ALIGNMENT_CENTER
 
        // on below line we are adding layout
        // param for heading text view.
        statusTV.layoutParams = txtLayoutParam
 
 
        // on below line we are creating layout params for switch.
        // and specifying width as wrap parent and height as wrap content
        val switchLayoutParam = LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
        )
         
        // on below line we are adding gravity
        switchLayoutParam.gravity = Gravity.CENTER
 
        // on below line we are adding margins.
        switchLayoutParam.setMargins(10, 10, 10, 10)
         
        // on below line we are creating a new switch
        val switch = Switch(this)
         
        // on below line we are adding layout params for switch
        switch.layoutParams = switchLayoutParam
 
        // on below line we are
        // checking the status of switch
        if (switch.isChecked) {
            // on below line we are setting text
            // if switch is checked.
            statusTV.text = "Switch is Checked"
        } else {
            // on below line we are setting the
            // text if switch is un checked
            statusTV.text = "Switch is UnChecked"
        }
 
        // on below line we are adding check change listener for our switch.
        switch.setOnCheckedChangeListener { buttonView, isChecked ->
            // on below line we are checking
            // if switch is checked or not.
            if (isChecked) {
                // on below line we are setting text
                // if switch is checked.
                statusTV.text = "Switch is Checked"
            } else {
                // on below line we are setting text
                // if switch is unchecked.
                statusTV.text = "Switch is UnChecked"
            }
        }
 
        // on below line we are adding our views
        // to container linear layout
        containerLL.addView(headingTV)
        containerLL.addView(statusTV)
        containerLL.addView(switch)
    }
}

Java




package com.gtappdevelopers.kotlingfgproject;
 
import android.graphics.Typeface;
import android.os.Build;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.Switch;
import android.widget.TextView;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
 
public class MainActivity extends AppCompatActivity {
 
    // on below line we are creating variables.
    private LinearLayout containerLL;
 
    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        // on below line we are initializing our variables.
        containerLL = findViewById(R.id.idLLContainer);
 
        // on below line we are creating layout params for text view.
        // and specifying width as match parent and height as wrap content
        LinearLayout.LayoutParams txtLayoutParam = new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT
        );
        // on below line we are adding gravity
        txtLayoutParam.gravity = Gravity.CENTER;
 
        // on below line we are creating our dynamic text view
        TextView headingTV = new TextView(this);
 
        // on below line we are setting  for our text view.
        headingTV.setText("Dynamic Switch in Android");
 
        // on below line we are updating text size.
        headingTV.setTextSize(20f);
 
        // on below line we are updating text color and font
        headingTV.setTextColor(getResources().getColor(R.color.black));
        headingTV.setTypeface(Typeface.DEFAULT_BOLD);
 
        // on below line we are adding padding
        headingTV.setPadding(20, 20, 20, 20);
 
        // on below line we are specifying text alignment.
        headingTV.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
 
        // on below line we are adding layout param
        // for heading text view.
        headingTV.setLayoutParams(txtLayoutParam);
 
 
        // on below line we are creating our dynamic text view
        TextView statusTV = new TextView(this);
 
        // on below line we are setting
        // for our text view.
        statusTV.setText("Status");
 
        // on below line we are
        // updating text size.
        statusTV.setTextSize(20f);
 
        // on below line we are updating text color and font
        statusTV.setTextColor(getResources().getColor(R.color.black));
        statusTV.setTypeface(Typeface.DEFAULT_BOLD);
 
        // on below line we are adding padding
        statusTV.setPadding(20, 20, 20, 20);
 
        // on below line we are specifying text alignment.
        statusTV.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
 
        // on below line we are adding layout param
        // for heading text view.
        statusTV.setLayoutParams(txtLayoutParam);
 
        // on below line we are creating layout params for switch.
        // and specifying width as wrap parent and height as wrap content
        LinearLayout.LayoutParams switchLayoutParam = new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT
        );
         
          // on below line we are adding gravity
        switchLayoutParam.gravity = Gravity.CENTER;
 
        // on below line we are adding margins.
        switchLayoutParam.setMargins(10, 10, 10, 10)
         
        // on below line we are creating a new switch
        Switch switchView = new Switch(this);
         
        // on below line we are adding
        // layout params for switch
        switchView.setLayoutParams(switchLayoutParam);
 
        // on below line we are checking
        // the status of switch
        if (switchView.isChecked()) {
            // on below line we are setting text
            // if switch is checked.
            statusTV.setText("Switch is Checked");
        } else {
            // on below line we are setting the text
            // if switch is un checked
            statusTV.setText("Switch is UnChecked");
        }
 
        // on below line we are adding check change listener for our switch.
        switchView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // on below line we are checking
                // if switch is checked or not.
                if (isChecked) {
                    // on below line we are setting text
                    // if switch is checked.
                    statusTV.setText("Switch is Checked");
                } else {
                    // on below line we are setting text
                    // if switch is unchecked.
                    statusTV.setText("Switch is UnChecked");
                }
            }
        });
    }
}

Теперь запустите ваше приложение, чтобы увидеть результат.

Выход: