¿Cómo podemos ocultar el diseño incluido mediante programación en Android?

7 minutos de lectura

avatar de usuario
Dharma Sai Seerapu

Tengo que incluir un diseño en mi aplicación. por lo que he usado

<include
    android:id="@+id/support_layout"
    android:width="match_parent"
    android:height="match_parent"
    layout="@layout/support"/>

He hecho referencia a esta etiqueta de inclusión en mi archivo Java usando View.

View v = (View) findViewById(R.id.support_layout);

Pero en algún punto de mi código tengo que Ocultar este diseño. por lo que usé v.SE HA IDO

Pero no se esconde. Quiero hacer referencia a esos atributos de texto y botón ubicados en XML programáticamente. ¿Cómo puedo hacer eso?

Ahí está mi support.xml:

<LinearLayout
    android:id="@+id/support_layout"
    android:width="match_parent"
    android:height="match_parent">

    <TextView
        android:id="@+id/txt"
        android:width="match_parent"
        android:height="wrap_content"/>

    <Button
        android:id="@+id/btn" 
        android:width="match_parent"
        android:height="wrap_content"
        android:text="Button"/>

</LinearLayout>

  • ¿Podrías publicar el código que estás usando para ocultar eso? View?

    –Hadi Satrio

    20 de noviembre de 2014 a las 5:36


  • intenta usar v.setVisibility(View.GONE); en cambio, solo v.GONE.

    – Haresh Chhelana

    20 de noviembre de 2014 a las 5:39

Ya que <include/> no es un tipo de vista en Android y visibility es propiedad de Viewno podemos acceder a la visibilidad desde la referencia del diseño incluido.

Sin embargo, si está utilizando kotlin con enlace de vista, podemos obtener la referencia de la raíz del diseño incluido como binding.supportLayout.root que probablemente será uno de los View (ConstraintLayout, RelativeLayout, LinearLayout etc.)

Ahora que tenemos una referencia de vista, podemos jugar con su visibilidad como se muestra a continuación.

binding.supportLayout.root.visibility = View.GONE

Espero que hayas captado la idea.

  • Funcionando, gracias por la buena explicación, otras respuestas no funcionan.

    – Pravin Desai

    28 de julio de 2021 a las 5:55


  • Esto no tiene nada que ver con el enlace de vista y se puede lograr simplemente findViewById()no sé si lo incluyeste

    – Farid

    2 de diciembre de 2021 a las 18:07

  • @Farid Quien usa findViewById() ahora, es bastante ineficiente. Además, no he dicho que esta sea la única manera. Esta es una de las posibles respuestas.

    – Ashish M

    6 de enero a las 13:18

avatar de usuario
hadi satrio

Necesitamos ver su implementación real de ocultar eso View Mencionaste.

Pero, directamente de leer su pregunta, supongo que podría haberlo hecho de manera incorrecta.

Para ocultar o hacer invisible una vista, use esto:

yourView.setVisibility(View.INVISIBLE);

Tenga en cuenta que esto no elimina la vista por completo; aún permanecería en su diseño y podría obtener una referencia o incluso intentar manipularlo.

Para eliminarlo completamente, use esto en su lugar:

yourView.setVisibility(View.GONE);

Ahora, si llama a esto, yourView se eliminará completamente del diseño. Ya no podrá obtener una referencia a él.

  • si usaré View.Visible nuevamente, ¿este diseño será visible o no?

    – Dharma Sai Seerapu

    20 de noviembre de 2014 a las 7:33

  • @DharmasaiSeerapu, por supuesto. si llamas yourView.setVisibility(View.VISIBLE) dicha ‘Vista’ volverá a ser visible.

    –Hadi Satrio

    20 de noviembre de 2014 a las 8:22

  • Pero en mi caso, muestra un error al acceder a elementos en el diseño.

    – Dharma Sai Seerapu

    20 de noviembre de 2014 a las 8:34


  • @Dharmasai Seerapu, sería difícil de resolver sin saber lo que haces en el código de gira. Actualice su pregunta junto con esa parte del código.

    –Hadi Satrio

    20 de noviembre de 2014 a las 10:58

  • Perderé mi referencia cuando establezca la visibilidad en View.GONE? He estado intentando esto durante mucho tiempo y puedo alternar entre View.GONE y View.VISIBLE. Puedo hacer que View.VISIBLE sea View.GONE.

    – Guerra de neón

    17 de septiembre de 2017 a las 9:25

Coloque esa vista en un diseño lineal y oculte el diseño lineal. Funcionará.

<LinearLayout
android:id="@+id/support_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<include
    layout="@layout/support"
    android:height="match_parent"
    android:width="match_parent" /> </LinearLayout>

Y no olvide escribir Linearlayout en lugar de View.

Brevemente, en lugar de

View v = (View) findViewById(R.id.support_layout);

Hacer esto

LinearLayout v = (LinearLayout) findViewById(R.id.support_layout);

  • Niega el uso de etiquetas de inclusión. La idea es hacer que la jerarquía sea plana.

    – williamj949

    1 de abril de 2017 a las 7:08

  • lo mismo para usar incluir con etiquetas de combinación

    – Shubham AgaRwal

    21 de agosto de 2018 a las 5:51

Puede ocultar este diseño “incluido” llamando establecerVisibilidad() :

v.setVisibility(View.GONE)

y mostrarlo más tarde llamando:

v.setVisibility(View.VISIBLE)

Para hacer referencia al botón y la vista de texto desde el diseño de soporte, puede usar el método findViewById en su Vista incluida (no estoy seguro, pero creo que ni siquiera es obligatorio, puede llamarlo directamente en la vista de su actividad):

View supportLayout = (View) findViewById(R.id.support_layout);
Textview txv = (TextView) findViewById(R.id.txt);
Button btn = (Button) findViewById(R.id.btn);

(si no funciona, intente con: Button btn = (Button) supportLayout.findViewById(R.id.btn);)

— Para tu información —

Cuando das atributos para incluir etiquetas anular los del diseño incluido (hay support_layout LinearLayout) así que no necesitas hacer eso

gracias al nuevo ConstraintLayout. Así es como lo hago con widget.Group

    <include
        android:id="@+id/bottom_bar_action"
        layout="@layout/bottom_bar_back_action"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

    <androidx.constraintlayout.widget.Group
        android:id="@+id/bottom_bar_group"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:constraint_referenced_ids="bottom_bar_action" />

Luego puede ocultar el diseño de inclusión haciendo binding.bottomBarGroup.visibility = View.GONE. Salud

avatar de usuario
el mj

debes usar así includedLayoutId.viewId.visibility = View.GONE en este caso puede acceder a la vista incluida, ahora por ejemplo:

cargando.xml

<com.airbnb.lottie.LottieAnimationView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/loading"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:lottie_autoPlay="true"
    app:lottie_fileName="loading.json"
    app:lottie_loop="true" />

en fragmento_a.xml:

 <include layout="@layout/loading"
            android:id="@+id/anim_loading"
            android:layout_width="match_parent"
            android:layout_height="@dimen/_80sdp"/>

y finalmente usarlo animLoading.loading.visibility = View.GONE

avatar de usuario
zakaria abd al-salam alshamere

     // 1 - copy this 
     <?xml version="1.0" encoding="utf-8"?>
     <LinearLayout
           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"
           android:orientation="vertical"
           tools:context=".Add">
       <Button
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:text="gone"
          android:onClick="onclick_gone_include"/>

       <Button
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:text="visible"
          android:onClick="onclick_visible_include"/>
     <LinearLayout
            android:id="@+id/support_layout"
           android:gravity="center"
           android:layout_width="match_parent"
           android:layout_height="100dp"
          >

          <include
              layout="@layout/support"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content" />
        </LinearLayout>
        </LinearLayout>

       //code
          //2 copy this to Add cliass
        //this methods on click in Add class
         public void onclick_gone_include(View view) {
             View v = (View) findViewById(R.id.support_layout);//view is the v
             v.setVisibility(View.GONE);

         }
              
          public void onclick_visible_include(View view) {
             View v = (View) findViewById(R.id.support_layout);        
             v.setVisibility(View.VISIBLE);
            }

         //3 activity that included 'support activity'
           <?xml version="1.0" encoding="utf-8"?>
       <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
            android:orientation="vertical"
            android:layout_width="match_parent"
            tools:context=".Add"
            android:gravity="center"
            android:layout_height="wrap_content">
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="textview1"
                />
        <TextView
           android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="textview2"
         />
     </LinearLayout>

¿Ha sido útil esta solución?