这个问题源于必须动态地显示/隐藏不同的观点。 View有3个可见性设置 - 可见,不可见和消失。如果你有一个父视图,例如一个LinearLayout
,它有几个子视图(无关紧要)是设置父视图的可见性,就像在所有子视图上独立设置visiblity一样?例如,如果我说
LinearLayout container = (LinearLayout) findViewById(R.id.layout_1);
container.setVisiblity(View.GONE);
是否与查找每个子视图并将所有这些可见性设置为View.GONE
相同?如果父母不是View.GONE
而是View.INVISIBLE
怎么办?是不是所有的孩子都被画了但是没有看到?
答案 0 :(得分:33)
效果是相同的,但实际上并没有设置所有孩子的可见性。它只是不会画它们。
例如:
将child设置为GONE(父级可见,子级已消失)
将父级设置为GONE(均已消失)
将父级设置为VISIBLE(父级可见,子级仍然消失,因为之前已明确设置子级)
将child设置为VISIBLE(均可见)
任何时候视图都是INVISIBLE,它不会绘制它或它的子节点。如果它是GONE,它也不会为它们保留任何布局空间。如果你检查孩子的getVisibility()
,你会看到它仍然设置为之前的状态,即使它没有被绘制。
答案 1 :(得分:0)
是的,你在所有方面都是正确的:)
将布局可见性设置为GONE将隐藏所有子项。将布局可见性设置为INVISIBLE将使所有子项不可见但仍然被绘制并占用空间。
答案 2 :(得分:0)
使用以下递归功能让您的孩子观看可见或消失。
第一个参数是您的父视图,第二个参数决定您是否希望父视图的子视图可见或消失。
true =可见
false =不见了
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);
}
}