Comment masquer une vue par programmation?

125

Dans mon application, j'ai des 2 LinearLayoutjuste au-dessus de l'autre. Via une option de menu, je veux pouvoir faire disparaître celui du bas et faire descendre celui du haut sur le disparu LinearLayout.

Le problème est que je n'ai aucune idée de comment faire cela en Java.

Il n'est pas nécessaire de l'animer, je souhaite masquer le Layoutau retour d'une autre activité (le menu), dans OnActivityResult. Le menu activitydéfinit un booleansur lequel je m'enregistre OnActivityResultet, en fonction de sa valeur, je détermine si je dois masquer ou afficher le bas 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.
    }
}

Quelqu'un peut-il me donner un indice ou un lien sur la façon dont je dois faire cela?

ThaMe90
la source

Réponses:

324

Vous pouvez appeler view.setVisibility(View.GONE)si vous souhaitez le supprimer de la mise en page.

Ou view.setVisibility(View.INVISIBLE)si vous voulez simplement le cacher.

Depuis Android Docs :

INVISIBLE

Cette vue est invisible, mais elle occupe toujours de l'espace à des fins de mise en page. Utiliser avec setVisibility(int)et android:visibility.

DISPARU

Cette vue est invisible et ne prend pas de place pour la mise en page. Utiliser avec setVisibility(int)et android:visibility.

Erich Douglass
la source
16
L'utilisateur peut-il toujours interagir avec lui s'il est défini sur view.setVisibility (View.INVISIBLE)?
WhiskThimble
Une activité, par exemple, peut-elle apporter des modifications à une vue si elle est définie sur GONE? J'imagine que vous pourriez si c'est réglé sur INVISIBLE.
moatist
1
Qu'en est-il de RelativeLayout? Les positions des vues dépendent les unes des autres. Je me demande ce qui va se passer après une vue passée.
Zin Win Htet
@ErPragatiSingh veuillez toujours mettre le lien d'où vous copiez-collez, et gardez la réponse similaire à celle que l'OP voulait dire. :)
Sufian
@Sufian merci, tout cela sur le site officiel du développeur Android.
Prags le
19

Essaye ça:

linearLayout.setVisibility(View.GONE);
Sec
la source
0

Solution 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

Solution d'extension Kotlin

Si vous souhaitez qu'ils aient une longueur plus cohérente, fonctionnent pour des vues Nullable et réduisent le risque d'écrire le mauvais booléen, essayez d'utiliser ces extensions personnalisées:

// 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
}
Gibolt
la source