En Android, ViewStub es una vista invisible de tamaño cero y muy flexible que podemos inflar perezosamente los recursos de diseño en tiempo de ejecución. Es una vista tonta y liviana y tiene dimensión cero. Depende del requerimiento, siempre que lo necesitemos podemos inflar en tiempo de ejecución. Este es un ejemplo clásico para manejar cuando hay que manejar vistas complicadas. Cuando ViewStub se infla, se reemplaza a sí mismo en su vista principal con el recurso de diseño inflado. Su visibilidad existirá en la jerarquía de vistas solo cuando se invoque setVisibility(int) o inflate( ) . La vista inflada se agrega al padre de ViewStub usando el parámetro de diseño. Siempre que haya detalles de elementos, mensajes de deshacer o indicadores de progreso , podemos pensar en ViewStub.Reduce el uso de memoria y acelera el renderizado al cargar las vistas solo cuando se necesitan. Uno puede pensar que se parece a la etiqueta de inclusión, pero no lo es. La etiqueta de inclusión incluye contenido en el archivo XML que está presente en la carpeta de diseño. Por lo tanto, podemos tener XML de encabezado, pie de página, barra izquierda y derecha por separado, pero aún así se incluyen en el XML principal mediante el uso de etiquetas de inclusión. Por otro lado, ViewStub no está incluido, pero se carga directamente cuando se establece como setVisibility(int) (para la opción true) o se invoca inflate().
Métodos importantes
Primero, obtengamos la referencia de ViewStub
ViewStub en XML:
XML
<ViewStub android:id="@+id/viewStubToLearn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="100dp" android:inflatedId="@+id/inflatedviewsub" android:layout="@layout/custom_viewstub" />
Java
// viewStubToLearn is the id of ViewStub defined in xml ViewStub simpleViewStub = ((ViewStub) findViewById(R.id.viewStubToLearn));
Métodos |
Descripción |
---|---|
obtenerIdInflado() | Para obtener la identificación tomada por la vista inflada |
setLayoutResource(int layoutResource) |
A través de este método, podemos configurar el recurso de diseño para que se infle cuando StubbedView se vuelve visible o invisible o cuando se invoca inflate(). |
getLayoutResource() |
Para obtener el recurso de diseño que utilizará setVisibility(int) o inflate() para reemplazar este StubbedView en su padre con otra vista. La resultante será un valor entero. |
inflar() |
Para inflar el recurso de diseño que se identifica por getLayoutResource() y reemplaza este StubbedView en su padre por el recurso de diseño inflado. |
setVisibility(int visibilidad) |
A veces es necesario hacer que la visibilidad sea invisible y más tarde en visible. |
setOnInflateListener(OnInflateListenerinflateListener) |
A través de esta llamada, especifica que se notificará al oyente inflado después este ViewStub infló con éxito su recurso de diseño. |
Atributos de ViewStub
Atributos |
Descripción |
---|---|
identificación | Para identificar de forma única un ViewStub |
ID inflado |
Para establecer la identificación de la vista inflada. A través de programación podemos configurar usando el método setInflatedId(). |
diseño |
Para proporcionar un identificador para que el recurso de diseño se infle cuando el ViewStub se vuelve visible o cuando se le obliga a hacerlo. Via se puede establecer mediante programación mediante el método setLayoutResource(int). |
Ejemplo
qué artículo.
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 Kotlin como lenguaje de programación.
Paso 2: trabajar con el archivo activity_main.xml
Vaya al archivo activity_main.xml y consulte el siguiente código. A continuación se muestra el código para el archivo activity_main.xml .
XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#fff" > <!-- To show the ViewStub --> <Button android:id="@+id/showButtonForViewStub" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="100dp" android:background="#0f0" android:text="Show ViewStub" android:textColor="#fff" android:textSize="16sp" android:textStyle="bold|italic" /> <!-- To hide the ViewStub --> <Button android:id="@+id/hideButtonForViewStub" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="10dp" android:background="#f00" android:text="Hide ViewStub" android:textColor="#fff" android:textSize="16sp" android:textStyle="bold|italic" /> <!-- ViewStub, its layout is specified under layout->custom_viewstub --> <ViewStub android:id="@+id/viewStubToLearn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="100dp" android:inflatedId="@+id/inflatedviewsub" android:layout="@layout/custom_viewstub" /> </LinearLayout>
Paso 3: Agrega una imagen a la carpeta dibujable
Vaya a la aplicación > res > carpeta dibujable, y debemos proporcionar las imágenes requeridas. Para diferentes resoluciones, si hay una necesidad de imágenes más grandes o más pequeñas, estará en la carpeta res para diferentes dibujables. Aquí, esta imagen se especifica en ImageView en custom_viewstub.xml . Entonces puede descargar esta imagen y pegarla en la carpeta dibujable.
Paso 4: Cree un nuevo archivo XML de diseño
Vaya a la aplicación > res > diseño > haga clic con el botón derecho en > Nuevo > XML > Archivo XML de diseño y nombre el archivo como custom_viewstub . A continuación se muestra el código para el archivo custom_viewstub.xml .
XML
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="200dp" android:layout_gravity="center" android:src="@drawable/cryptocurrency" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="CRYPTOCURRENCY" android:textColor="@color/colorAccent" /> </LinearLayout>
Paso 5: trabajar con el archivo MainActivity.kt
Vaya al archivo MainActivity.kt y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.kt . Se agregan comentarios dentro del código para comprender el código con más detalle.
Kotlin
import android.app.Activity import android.os.Bundle import android.view.View import android.view.ViewStub import android.widget.Button class MainActivity : Activity() { var simpleViewStub: ViewStub? = null var showButton: Button? = null var hideButton: Button? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // get the reference of ViewStub simpleViewStub = findViewById<View>(R.id.viewStubToLearn) as ViewStub // inflate the layout simpleViewStub!!.inflate() // get the reference of show button showButton = findViewById<View>(R.id.showButtonForViewStub) as Button // get the reference of hide button hideButton = findViewById<View>(R.id.hideButtonForViewStub) as Button // perform click event on show button showButton!!.setOnClickListener { // set VISIBLE visibility of ViewStub simpleViewStub!!.visibility = View.VISIBLE } // perform click event on hide button hideButton!!.setOnClickListener { // set GONE visibility of ViewStub simpleViewStub!!.visibility = View.GONE } } }
Ejecutar el proyecto en un emulador
Al ejecutar el proyecto, podemos ver un tipo de salida similar al adjunto en el video. Por lo tanto, ViewStub es una característica agradable en Android y, cuando lo necesitemos, podemos invocar lo que proporciona una enorme reducción del uso de la memoria, pero al mismo tiempo podemos activarlo al inflarlo.
Publicación traducida automáticamente
Artículo escrito por priyarajtt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA