Динамический TextSwitcher в Android

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

Text Switcher — это виджет в 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.Color
import android.graphics.Typeface
import android.os.Bundle
import android.view.Gravity
import android.view.ViewGroup
import android.view.animation.AnimationUtils
import android.widget.*
import androidx.appcompat.app.AppCompatActivity
 
class MainActivity : AppCompatActivity() {
 
    // on below line creating a variable.
    lateinit var containerLL: LinearLayout
    val languages = arrayOf("Java", "C", "Kotlin", "C++")
    var index = 0
 
    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 Text Switcher 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 simple text switcher.
        val textSwitcher = TextSwitcher(this)
 
        // on below line we are setting factor for our text switcher.
        textSwitcher.setFactory {
            // on below line we are adding a text view in our text switcher.
            val textView = TextView(this@MainActivity)
             
            // on below line we are adding gravity for our text
            textView.gravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL
             
             // on below line we are adding a text size
            textView.textSize = 32f
             
            // on below line we are adding a padding,
            textView.setPadding(100, 100, 100, 100)
             
            // on below line we are setting color for our text
            textView.setTextColor(Color.BLACK)
            textView
        }
 
        // on below line we are setting text for text switcher.
        textSwitcher.setText(languages[index])
 
        // on below line we are creating a variable
        // for our slide in animation
        val textIn = AnimationUtils.loadAnimation(
            this, android.R.anim.slide_in_left
        )
         
        // on below line we are setting
        // animation to our text switcher.
        textSwitcher.inAnimation = textIn
 
        // on below line we are creating a variable
        // for slide out animation
        val textOut = AnimationUtils.loadAnimation(
            this, android.R.anim.slide_out_right
        )
         
        // on below line we are setting out
        // animation for text switcher
        textSwitcher.outAnimation = textOut
 
        // on below line we are creating a
        // layout params for button
        val buttonParam = LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
        )
         
        // on below line we are adding margin for buttons.
        buttonParam.setMargins(10, 10, 10, 10)
 
        // on below line we are creating a previous button
        // and adding text and style to it on below line
        val prevBtn = Button(this)
        prevBtn.text = "Previous"
        prevBtn.isAllCaps = false
         
        // on below line setting params to it.
        prevBtn.layoutParams = buttonParam
         
        // on below line we are setting text color to it.
        prevBtn.setTextColor(resources.getColor(R.color.white))
         
        // on below line we are adding background color to it.
        prevBtn.setBackgroundColor(resources.getColor(R.color.purple_200))
         
        // on below line we are adding click listener
        prevBtn.setOnClickListener {
            // on below line we are updating index
            index = if (index - 1 >= 0) index - 1 else 3
            textSwitcher.setText(languages[index])
        }
 
        // on below line we are creating a next button
        // and adding text and style to it on below line
        val nextBtn = Button(this)
        nextBtn.text = "Next"
        nextBtn.isAllCaps = false
         
        // on below line setting params to it.
        nextBtn.layoutParams = buttonParam
         
        // on below line we are setting text color to it.
        nextBtn.setTextColor(resources.getColor(R.color.white))
         
        // on below line we are adding background color to it.
        nextBtn.setBackgroundColor(resources.getColor(R.color.purple_200))
         
        // on below line we are adding click listener
        nextBtn.setOnClickListener {
            // on below line we are updating index
            index = if (index + 1 < languages.size) index + 1 else 0
            textSwitcher.setText(languages[index])
        }
 
        // on below line we are adding our views
        // to container linear layout
        containerLL.addView(headingTV)
        containerLL.addView(textSwitcher)
        containerLL.addView(prevBtn)
        containerLL.addView(nextBtn)
 
    }
}

Java




package com.gtappdevelopers.kotlingfgproject;
 
import android.graphics.Color;
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.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextSwitcher;
import android.widget.TextView;
import android.widget.ViewSwitcher;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
 
public class MainActivity extends AppCompatActivity {
 
    // on below line we are creating variables.
    private LinearLayout containerLL;
    String languages[] = {"Java", "C", "Kotlin", "C++"};
    int index = 0;
 
    @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 Text Switcher 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 a simple text switcher.
        TextSwitcher textSwitcher = new TextSwitcher(this);
 
        // on below line we are setting factor for our text switcher.
        textSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
            @Override
            public View makeView() {
                // on below line we are adding a text view in our text switcher.
                TextView textView = new TextView(MainActivity.this);
                 
                // on below line we are adding gravity for our text
                textView.setGravity(Gravity.CENTER_HORIZONTAL);
                 
                // on below line we are adding a text size
                textView.setTextSize(32f);
                 
                // on below line we are adding a padding,
                textView.setPadding(100, 100, 100, 100);
                 
                // on below line we are setting color for our text
                textView.setTextColor(Color.BLACK);
                return textView;
            }
        });
 
        // on below line we are setting text for text switcher.
        textSwitcher.setText(languages[index]);
 
        // on below line we are creating a variable
        // for our slide-in animation
        Animation textIn = AnimationUtils.loadAnimation(
                this, android.R.anim.slide_in_left
        );
         
        // on below line we are setting animation
        // to our text switcher.
        textSwitcher.setInAnimation(textIn);
 
        // on below line we are creating a variable
        // for slide out animation
        Animation textOut = AnimationUtils.loadAnimation(
                this, android.R.anim.slide_out_right
        );
         
        // on below line we are setting out
        // animation for text switcher
        textSwitcher.setOutAnimation(textOut);
 
        // on below line we are creating a layout params for button
        LinearLayout.LayoutParams buttonParam = new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT
        );
         
        // on below line we are adding margin for buttons.
        buttonParam.setMargins(10, 10, 10, 10)
 
        // on below line we are creating a previous button
        // and adding text and style to it on below line
        Button prevBtn = new Button(this);
        prevBtn.setText("Previous");
        prevBtn.setAllCaps(false);
         
        // on below line setting params to it.
        prevBtn.setLayoutParams(buttonParam);
         
        // on below line we are setting text color to it.
        prevBtn.setTextColor(getResources().getColor(R.color.white));
  &n