Come nascondere una vista a livello di codice?


125

Nella mia applicazione, ho 2 LinearLayout'proprio uno sopra l'altro. Tramite un'opzione di menu, voglio essere in grado di far scomparire quello inferiore e far cadere quello superiore su quello scomparso LinearLayout.

Il problema è che non ho idea di come farlo in Java.

Non deve essere animato, voglio nascondere il Layoutritorno di un'altra attività (il menu), in OnActivityResult. Il menu activityimposta un booleansu cui eseguo il check-in OnActivityResulte in base al suo valore, determina se devo nascondere o mostrare il fondo Layout:

// Only change value if it is different from what it was.
if(mUseVolumeButtonAsPTT != resultData.getBoolean("UseVolumeButtonAsPTT")){
    mUseVolumeButtonAsPTT = resultData.getBoolean("UseVolumeButtonAsPTT");
    if(!mUseVolumeButtonAsPTT){
        // Hide lower LinearLayout.
    } else {
        // Show lower LinearLayout.
    }
}

Qualcuno può darmi un suggerimento o un link su come dovrei farlo?

Risposte:


324

Puoi chiamare view.setVisibility(View.GONE)se vuoi rimuoverlo dal layout.

O view.setVisibility(View.INVISIBLE)se vuoi solo nasconderlo.

Da documenti Android :

INVISIBILE

Questa vista è invisibile, ma occupa ancora spazio per scopi di layout. Utilizzare con setVisibility(int)e android:visibility.

ANDATO

Questa vista è invisibile e non occupa spazio ai fini del layout. Utilizzare con setVisibility(int)e android:visibility.


16
L'utente può ancora interagire con esso se è impostato su view.setVisibility (View.INVISIBLE)?
WhiskThimble

Un'attività, ad esempio, può apportare modifiche a una vista se è impostata su ANDATO? Immagino che potresti se fosse impostato su INVISIBLE.
Moatista,

1
Che dire di RelativeLayout? Le posizioni delle viste dipendono l'una dall'altra. Mi chiedo cosa accadrà dopo una visione sparita.
Zin Win Htet,

@ErPragatiSingh si prega di inserire sempre il collegamento dal punto in cui si copia e incolla e mantenere la risposta simile a come voleva dire l'OP. :)
Sufian,

@Sufian grazie, tutto dal sito ufficiale dello sviluppatore Android.
Prags

19

Prova questo:

linearLayout.setVisibility(View.GONE);

0

Soluzione di Kotlin

view.isVisible = true
view.isInvisible = true
view.isGone = true

// For these to work, you need to use androidx and import:
import androidx.core.view.isVisible // or isInvisible/isGone

Soluzione di estensione Kotlin

Se desideri che siano di lunghezza più coerente, lavori per visualizzazioni nullable e riduca la possibilità di scrivere il booleano sbagliato, prova a utilizzare queste estensioni personalizzate:

// Example
view.hide()

fun View?.show() {
    if (this == null) return
    if (!isVisible) isVisible = true
}

fun View?.hide() {
    if (this == null) return
    if (!isInvisible) isInvisible = true
}

fun View?.gone() {
    if (this == null) return
    if (!isGone) isGone = true
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.