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?

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.


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);

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
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.