Intereting Posts

Влияние установки видимости родительского вида на своих детей

Этот вопрос возникает из-за необходимости динамически отображать / скрывать разные представления. У View есть 3 настройки видимости – видимые, невидимые и ушедшие. Если у вас есть родительский вид, например LinearLayout , который имеет несколько дочерних представлений (неважно, каковы они), LinearLayout ли видимость родителя так же, как настройка видимости для всех детей независимо? Например, если я скажу

 LinearLaout container = (LinearLayout) findViewById(R.id.layout_1); container.setVisiblity(View.GONE); 

Это то же самое, что и поиск каждого отдельного дочернего представления и установка всех этих View.GONE в View.GONE ? Что делать, если родитель не был View.GONE но View.INVISIBLE ? Все ли дети все еще нарисованы, но просто не видели?

Solutions Collecting From Web of "Влияние установки видимости родительского вида на своих детей"

Эффект тот же, но на самом деле он не устанавливает видимость всех детей. Он просто их не нарисовал.

Например:

  1. Установите child в GONE (родительский вид, ребенок ушел)

  2. Установите родительский GONE (оба ушли)

  3. Установите родительский элемент VISIBLE (родительский вид, дочерний объект все еще ушел, поскольку дочерний элемент был явно задан раньше)

  4. Установите дочерний элемент VISIBLE (оба видны)

Каждый раз, когда представление НЕВИДИМО, он не будет рисовать его или его детей. Если он GONE, он также не резервирует для них место макета. Если вы проверите getVisibility() ребенка, вы увидите, что он все еще настроен на то, что было до этого, даже если он не отображается.

Используйте ниже рекурсивную функцию, чтобы сделать вид вашего ребенка видимым или исчезнувшим .
Первый аргумент – это ваш родительский вид, а второй аргумент решает, хотите ли вы видеть родительские представления дочерних элементов. True = visible false = go

 private void layoutElemanlarininGorunumunuDegistir(View view, boolean gorunur_mu_olsun) { ViewGroup view_group; try { view_group = (ViewGroup) view; Sabitler.konsolaYazdir(TAG, "View ViewGroup imiş!" + view.getId()); } catch (ClassCastException e) { Sabitler.konsolaYazdir(TAG, "View ViewGroup değilmiş!" + view.getId()); return; } int view_eleman_sayisi = view_group.getChildCount(); for (int i = 0; i < view_eleman_sayisi; i++) { View view_group_eleman = view_group.getChildAt(i); if (gorunur_mu_olsun) { view_group_eleman.setVisibility(View.VISIBLE); } else { view_group_eleman.setVisibility(View.GONE); } layoutElemanlarininGorunumunuDegistir(view_group_eleman, gorunur_mu_olsun); } } 

Да, ты прав по всем пунктам 🙂

Настройка видимости макетов для GONE скроет всех детей. Настройка видимости макетов для INVISIBLE сделает всех детей невидимыми, но все еще привлеченными и занимающими пространство.