设置父视图可见性对其子项的影响

时间:2013-11-04 19:23:37

标签: android android-layout android-linearlayout android-view

这个问题源于必须动态地显示/隐藏不同的观点。 View有3个可见性设置 - 可见,不可见和消失。如果你有一个父视图,例如一个LinearLayout,它有几个子视图(无关紧要)是设置父视图的可见性,就像在所有子视图上独立设置visiblity一样?例如,如果我说

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

是否与查找每个子视图并将所有这些可见性设置为View.GONE相同?如果父母不是View.GONE而是View.INVISIBLE怎么办?是不是所有的孩子都被画了但是没有看到?

3 个答案:

答案 0 :(得分:33)

效果是相同的,但实际上并没有设置所有孩子的可见性。它只是不会画它们。

例如:

  1. 将child设置为GONE(父级可见,子级已消失)

  2. 将父级设置为GONE(均已消失)

  3. 将父级设置为VISIBLE(父级可见,子级仍然消失,因为之前已明确设置子级)

  4. 将child设置为VISIBLE(均可见)

  5. 任何时候视图都是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);
    }
}