No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Aprende Ingl茅s, Programaci贸n, AI, Ciberseguridad y m谩s a precio especial.

Antes: $249

Currency
$209
Suscr铆bete

Termina en:

1 D铆as
19 Hrs
39 Min
38 Seg

Reutilizando elementos

19/20
Recursos

Aportes 18

Preguntas 5

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Y c贸mo har铆amos para centrar de nuevo el logo?
O sea, yo lo centr茅 usando un RelativeLayout, poniendo los constraints y en su contenido puse el include, pero no s茅 si eso tambi茅n es un anidamiento innecesario.

驴Cu谩l ser铆a la manera correcta?
As铆 es como lo puse:

    <RelativeLayout
        android:id="@+id/logoContainer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <include layout="@layout/merge_logo" />
    </RelativeLayout>

Para centrar el logo, simplemente vamos a merge_logo y ahi agregamos los constraint que centran el view.

Lo que sucede con merge es que android hace de cuenta como si ese ImageView fuera sido declarado dentro de nuestro propio layout donde lo agregamos, el no se da cuenta que viene de otra parte.

Entonces en merge_logo podriamos definir como quiero que se vea mi elemento en los otros layout donde lo voy a invocar.

La diferencia entre Include y Merge es que Include va a halar todos los elementos que ya tengas en el Layout.


Merge: simplemente los va a agregar como si fueran elementos presentes en tu Layout.

En ocasiones hay elementos de layout que se repiten en muchas vistas o en su defecto en todas. En Android es posible reutilizar estos elementos, para ello hay que hacer lo siguiente:

  1. Poner el elemento que se repite dentro de un nuevo Activity.

    Ejemplo:

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="https://schemas.android.com/apk/res/android" android:layout_width="match_parent"
        xmlns:app="https://schemas.android.com/apk/res-auto"
        android:layout_height="match_parent">
    
        <ImageView
            android:layout_width="@dimen/width_logo"
            android:layout_height="@dimen/height_logo"
            android:contentDescription="@string/description_logo"
            android:src="@drawable/logo"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    
  2. A帽adir ese archivo al layout en el que se quiere usar. Ejemplo:

    <include layout="@layout/include_logo" />
    
  3. Agregar los atributos necesarios para posicionar el elemento de la manera deseada. Ejemplo:

    <include
            android:id="@+id/ivProfileLogo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            layout="@layout/include_logo" />
    

Usar este m茅todo tiene un problema y es que cuando Android resuelva el layout va a tener en este caso un ConstraintLayout que tiene adentro otro ConstraintLayout, lo cu谩l cusa una anidaci贸n de layouts donde no es necesario y una consecuente perdida innecesaria de rendimiento.

Hay una de solucionar esto e incluir un layout dentro de otro sin que se genere una anidaci贸n, para conseguir eso hay que hacer lo siguiente:

  1. Poner el elemento que se repite dentro de un nuevo Activity. Este Activity usar谩 un ViewGroup <merge>.

    Ejemplo:

    <?xml version="1.0" encoding="utf-8"?>
    <merge
        xmlns:android="https://schemas.android.com/apk/res/android" android:layout_width="match_parent"
        xmlns:app="https://schemas.android.com/apk/res-auto"
        android:layout_height="match_parent">
    
        <ImageView
            android:id="@+id/ivProfileLogo"
            android:layout_width="@dimen/width_logo"
            android:layout_height="@dimen/height_logo"
            android:contentDescription="@string/description_logo"
            android:src="@drawable/logo" />
    
    </merge>
    
  2. A帽adir ese archivo al layout en el que se quiere usar. Ejemplo:

    <include
            android:id="@+id/ivProfileLogo"
            layout="@layout/merge_logo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
  3. Agregar los atributos necesarios para posicionar el elemento de la manera deseada. Ejemplo:

    <ImageView
            android:id="@+id/ivProfileLogo"
            android:layout_width="@dimen/width_logo"
            android:layout_height="@dimen/height_logo"
            android:contentDescription="@string/description_logo"
            android:src="@drawable/logo"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    

La diferencia entre Include y Merge es la forma en la que Android Studio los instancia:
Usando un layout tipo Include, Android Studio crear谩 un layout adicional a la hora de referenciar a ese elemento.
Y si extraemos los elementos dentro de un layout tipo Merge, Android Studio los agrega como un elemento normal, sin crear layouts adicionales.

Increible clase

Asi nomas

Lo que desarrolle con el curso 馃槂

  • Include trae a tu vista un conjunto de elementos

  • Merge trae las propiedades de los elementos que se utiliza include

Hice esta p谩gina de login:

El include es de este archivo:

Alguien sabe a que se refiere con afectar el 谩rbol jerargico de las vistas, me refiero a que cual seria el impacto en este o en el rendimiento de la app?

TIP: puedes agregar el Namespace de app escribiendo appNS en Android Studio y luego d谩ndole a la tecla Tab

De esta manera pude centrar el logo:

<?xml version=鈥1.0鈥 encoding=鈥渦tf-8鈥?>
<merge
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height=鈥渕atch_parent鈥>

<ImageView
    android:id="@+id/ivLoginLogo"
    android:layout_width="match_parent"
    android:layout_height="@dimen/height_logo"
    android:src="@drawable/logpa" />

</merge>

Elementos
SI hay un elemento exactamente igual siempre existe un a manera para no tener que tener las mismas lineas repetidas una y otra vez.
Para esto crearemos un layout exclusivamente con ese elemento y para incluirlo usaremos <include layout"@鈥"/>Es recomendable que el layout nuevo sea un tipo merge, para que no se aniden los layouts, esto sera mejor para andorid

Una consulta, al utilizar el merge, centrarlo y visualizar los constraint en dise帽o y blueprint, esta bien que salga como si merge es de un tama帽o muy peque帽o en la esquina superior izquierda? ![](https://static.platzi.com/media/user_upload/image-6e020164-cfab-4265-b9cd-e4397e81da5f.jpg)

A darle atomos