Los intervalos son los objetos de marcado. Estos se pueden usar para diseñar los textos a nivel de carácter o párrafo. Los intervalos se adjuntan a los objetos de texto y nos brindan una variedad de opciones para el texto, que incluyen agregar color al texto, aplicar un comportamiento de clic al texto, escalar el tamaño del texto y dibujar el texto de manera personalizada. Los intervalos también se pueden usar para cambiar las propiedades de TextPaint, dibujar en Canvas e incluso cambiar el diseño del texto. Para usar intervalos, tenemos que usar una de las clases que se enumeran a continuación.
Clase |
Texto mutable |
Marcado mutable |
Estructura de datos |
---|---|---|---|
String extendida | No | No | array lineal |
String expandible | No | Sí | array lineal |
Constructor de strings expandibles | Sí | Sí | Árbol de intervalos |
Todas estas clases amplían la interfaz distribuida . SpannableString y SpannableStringBuilder también amplían la interfaz de Spannable . Para usar un intervalo, debemos llamar a setSpan(Object spans, int start, int end, int flag) en el objeto Spanable . El parámetro de intervalo de objeto se refiere al intervalo que se aplicará al texto, el inicio y el final se refieren a los índices de las posiciones del texto sobre las que se aplicarán los intervalos.
Al aplicar el intervalo, si el texto insertado está dentro de los límites del intervalo, el intervalo expande automáticamente el texto insertado. Y si el texto insertado se encuentra entre los índices de inicio y fin, el parámetro de la bandera decidirá que el intervalo debe incluir o excluir el texto insertado.
- Spannable.SPAN_EXCLUSIVE_INCLUSIVE – Incluir texto insertado
- Spannable.SPAN_EXCLUSIVE_EXCLUSIVE : excluye el texto insertado.
Ejemplo
En este ejemplo, vamos a cambiar el estilo del texto usando la clase SpannableString junto con StyleSpan, UnderlineSpan y StrikethroughSpan. whatTenga en cuenta que vamos a implementar este proyecto utilizando el lenguaje Java .
Implementación paso a paso
Paso 1: Crear un nuevo proyecto
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.
Paso 2: trabajar con el archivo activity_main.xml
En el archivo de diseño, tendremos un TextView . Le daremos estilo a este texto usando intervalos. A continuación se muestra el fragmento de código para el archivo activity_main.xml.
XML
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <!--The text we provide here is only for reference purpose we need to provide it in MainActivity.java file--> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="I want Red and Green to be coloured and this to be Bold, Italic and Underline and Strike-through" android:textAlignment="center" android:textSize="18sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
Paso 3: trabajar con MainActivity.java
En el archivo MainActivity.java , primero definiremos una string que necesita estilo. Una vez que definimos la string, la convertimos en una string expandible, luego definimos todos los intervalos que necesitamos para la modificación y luego establecemos estos intervalos sobre las strings expandibles y finalmente establecemos la string expandible en TextView. A continuación se muestra el código del archivo MainActivity.java . Se agregan comentarios dentro del código para comprender el código con más detalle.
Java
import android.graphics.Color; import android.graphics.Typeface; import android.os.Bundle; import android.text.SpannableString; import android.text.Spanned; import android.text.style.ForegroundColorSpan; import android.text.style.StrikethroughSpan; import android.text.style.StyleSpan; import android.text.style.UnderlineSpan; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Referencing the TextView TextView textView = (TextView) findViewById(R.id.textView); // The text that need to be styled using spans String text = "I want Red and Green to be colored and these to be Bold, Italic and Underline and Strike-through"; // This will convert the text-string to spannable string // and we will used this spannableString to put spans on // them and make the sub-string changes SpannableString spannableString = new SpannableString(text); // Creating the spans to style the string ForegroundColorSpan foregroundColorSpanRed = new ForegroundColorSpan(Color.RED); ForegroundColorSpan foregroundColorSpanGreen = new ForegroundColorSpan(Color.GREEN); StyleSpan boldSpan = new StyleSpan(Typeface.BOLD); StyleSpan italicSpan = new StyleSpan(Typeface.ITALIC); UnderlineSpan underlineSpan = new UnderlineSpan(); StrikethroughSpan strikethroughSpan = new StrikethroughSpan(); // Setting the spans on spannable string spannableString.setSpan(foregroundColorSpanRed, 7, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); spannableString.setSpan(foregroundColorSpanGreen, 15, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); spannableString.setSpan(boldSpan, 51, 55, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); spannableString.setSpan(italicSpan, 57, 63, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); spannableString.setSpan(underlineSpan, 68, 77, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); spannableString.setSpan(strikethroughSpan, 82, 96, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // Setting the spannable string on TextView textView.setText(spannableString); } }