Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 设置父视图可见性对其子视图的影响_Android_Android Layout_Android Linearlayout_Android View - Fatal编程技术网

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

Android 设置父视图可见性对其子视图的影响,android,android-layout,android-linearlayout,android-view,Android,Android Layout,Android Linearlayout,Android View,这个问题源于必须动态显示/隐藏不同的视图。视图有3个可见性设置-可见、不可见和消失。如果您有一个父视图,例如具有多个子视图(不管它们是什么)的LinearLayout,是否将父视图的可见性设置为与单独设置所有子视图的可见性相同?例如,如果我说 LinearLayout container = (LinearLayout) findViewById(R.id.layout_1); container.setVisiblity(View.GONE); 这与查找每个单独的子视图并将所有这些可见性设置

这个问题源于必须动态显示/隐藏不同的视图。视图有3个可见性设置-可见、不可见和消失。如果您有一个父视图,例如具有多个子视图(不管它们是什么)的
LinearLayout
,是否将父视图的可见性设置为与单独设置所有子视图的可见性相同?例如,如果我说

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

这与查找每个单独的子视图并将所有这些可见性设置为
view.GONE
相同吗?如果父对象不是
View.go
,而是
View.INVISIBLE
,该怎么办?所有的孩子都还在画画,只是看不见而已吗?

是的,你在所有方面都是正确的:)


将布局可见性设置为GONE将隐藏所有子级。将布局可见性设置为“不可见”将使所有子级都不可见,但仍会绘制并占用空间。

效果相同,但实际上不会设置所有子级的可见性。它不会吸引他们

例如:

  • 将子项设置为已消失(父项可见,子项已消失)

  • 将父项设置为“已消失”(均已消失)

  • 将父项设置为可见(父项可见,子项仍然不存在,因为子项之前已显式设置)

  • 将子对象设置为可见(均可见)


  • 任何时候一个视图是不可见的,它都不会绘制它或它的子视图。如果它消失了,它也不会为它们保留任何布局空间。但是,如果您检查子视图的
    getVisibility()
    ,您将看到它仍然设置为以前的状态,即使它没有被绘制。

    使用下面的递归函数使子视图可见消失
    第一个参数是您的父视图,第二个参数决定您希望父视图的子视图可见还是消失。 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);
        }
    }
    
    private void layouttelemanlariningorunumunudegistir(视图视图,布尔值gorunur\u mu\u olsun){
    视图组视图组;
    试一试{
    视图组=(视图组)视图;
    Sabitler.konsolaYazdir(标记“View-ViewGroup-imiş!”+View.getId());
    }catch(ClassCastException e){
    Sabitler.konsolaYazdir(标签“View ViewGroup değilmiş!”+View.getId());
    返回;
    }
    int view_eleman_sayisi=view_group.getChildCount();
    for(int i=0;i
    您在文档中的任何地方都有一个链接,上面写着?我知道当我将父布局设置为View.Goe时,它会隐藏子布局,但它是“取消绘制”它们还是只是使它们不可见?这种行为对我来说没有意义,特别是因为它与XML膨胀不同(即可见性传播到子布局)。是否有一种变通方法可以使XML和Java保持一致?