Jak programowo ukryć widok?

125

W mojej aplikacji mam 2 LinearLayoutnad sobą. Za pomocą opcji menu chcę mieć możliwość zniknięcia dolnej z nich, a górną listę rozwijaną nad zniknięciem LinearLayout.

Problem w tym, że nie mam pojęcia, jak to zrobić w Javie.

Nie musi być animowane, chcę ukryć Layoutpowrót innej czynności (menu) w formacie OnActivityResult. W menu activityustawia się, booleanna którym się melduję OnActivityResulti na podstawie jego wartości określam, czy muszę ukryć, czy pokazać spód 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.
    }
}

Czy ktoś może mi podpowiedzieć lub podać link, jak mam to zrobić?

ThaMe90
źródło

Odpowiedzi:

324

Możesz zadzwonić, view.setVisibility(View.GONE)jeśli chcesz usunąć go z układu.

Lub view.setVisibility(View.INVISIBLE)jeśli po prostu chcesz to ukryć.

Z Dokumentów na Androida :

NIEWIDZIALNY

Ten widok jest niewidoczny, ale nadal zajmuje miejsce do celów układu. Używaj z setVisibility(int)i android:visibility.

ODSZEDŁ

Ten widok jest niewidoczny i nie zajmuje miejsca do celów układu. Używaj z setVisibility(int)i android:visibility.

Erich Douglass
źródło
16
Czy użytkownik może nadal wchodzić z nim w interakcje, jeśli jest ustawiony na view.setVisibility (View.INVISIBLE)?
WhiskThimble
Czy działanie, na przykład, może wprowadzać zmiany w widoku, jeśli jest ustawione na GONE? Wyobrażam sobie, że mógłbyś, gdyby było ustawione na NIEWIDZIALNE.
moatist
1
A co z RelativeLayout? Pozycje widoków są od siebie zależne. Zastanawiam się, co się stanie, gdy zniknie widok.
Zin Win Htet
@ErPragatiSingh proszę zawsze umieszczać link z miejsca, w którym kopiujesz i wklejasz, i zachowaj odpowiedź podobną do tego, jaką chciał powiedzieć OP. :)
Sufian
@Sufian dzięki, wszystko z oficjalnej strony programistów Androida.
Prags
19

Spróbuj tego:

linearLayout.setVisibility(View.GONE);
DRiFTy
źródło
0

Rozwiązanie 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

Rozszerzenie Kotlin

Jeśli chcesz, aby miały bardziej spójną długość, pracowały dla widoków zerowych i zmniejszały szansę na napisanie niewłaściwych wartości logicznych, spróbuj użyć tych rozszerzeń niestandardowych:

// 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
źródło