132 votes

Comment masquer une vue de manière programmatique ?

Dans mon application, j'ai 2 LinearLayout juste au-dessus l'un de l'autre. Par le biais d'une option de menu, je veux pouvoir faire disparaître celui du bas et faire descendre celui du haut au-dessus de celui qui a disparu. LinearLayout .

Le problème, c'est que je n'ai aucune idée de la façon de faire cela en Java.

Il n'est pas nécessaire de l'animer, je veux cacher la Layout au retour d'une autre activité (le menu), en OnActivityResult . Le menu activity fixe un boolean sur lequel je vérifie OnActivityResult et en fonction de sa valeur, je détermine si je dois cacher ou afficher la partie inférieure de l'écran. 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 manière de procéder ?

335voto

Erich Douglass Points 21714

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

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

De Docs Android :

INVISIBLE

Cette vue est invisible, mais elle prend quand même de la place pour la mise en page. Utilisez avec setVisibility(int) y android:visibility .

GONE

Cette vue est invisible et ne prend pas d'espace pour la mise en page. Utilisez avec setVisibility(int) y android:visibility .

18 votes

L'utilisateur peut-il encore interagir avec elle si elle est réglée sur view.setVisibility(View.INVISIBLE) ?

0 votes

Une activité peut-elle, par exemple, apporter des modifications à une vue si celle-ci est définie comme étant GONE ? J'imagine que oui, si elle est définie comme INVISIBLE.

1 votes

Qu'en est-il dans RelativeLayout ? Les positions des vues dépendent les unes des autres. Je me demande ce qui se passera après la disparition d'une vue.

19voto

DiscGolfer Points 4655

Essayez ça :

linearLayout.setVisibility(View.GONE);

1voto

Gibolt Points 4072

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, qu'ils fonctionnent pour les vues nullables et que vous réduisiez les risques 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
}

Pour simplifier la visibilité conditionnelle, ajoutez également ces éléments :

fun View?.show(visible: Boolean) {
    if (visible) show() else gone()
}

fun View?.hide(hide: Boolean) {
    if (hide) hide() else show()
}

fun View?.gone(gone: Boolean = true) {
    if (gone) gone() else show()
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X