自定义视图和它在构造函数中膨胀的视图有什么区别?

时间:2016-10-22 15:32:15

标签: java android android-linearlayout

我们可以按如下方式创建自定义组件:

public class MyLinearLayout extends LinearLayout {  
    public MyLinearLayout(Context context) {  
      super(context); 
      doInflate();   
    }  
    public MyLinearLayout(Context context, AttributeSet attrs) {  
       super(context, attrs);  
       doInflate();    
    }  
    // other constructors  

   public void doInflate(){  
      inflate(getContext(), R.layout.my_linear_layout_definition_xml, this);
      this.setVisibility(GONE);  
   }     


   // some logic to show view  
   public void show(CustomObject o) {   
     if(o.someCondition()) return;  
     this.setVisibility(VISIBLE);  
   }    
}   

如果我通过代码示例中的this来控制可见性,我认为ViewGroup视图永远不会显示。即this.setVisibility(VISIBLE);不起作用。

但是如果在布局文件(my_linear_layout_definition_xml.xml)中我有:

<LinearLayout android:id="@+id/my_linear_layout_parent_container"
              xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:visibility="gone"
>
// other children views here...  

在代码中我代替上一段代码:

public void show(CustomObject o) {   
         if(o.someCondition()) return;    
         findViewById(R.id.my_linear_layout_parent_container)
         .setVisibility(VISIBLE);    
       }   

可见性确实有效。即从变得明显。

所以我的问题是为什么这会起作用?my_linear_layout_parent_container我在构造函数中膨胀与我班级中的this之间的关系/区别是什么?

1 个答案:

答案 0 :(得分:0)

你回答显然是矛盾的,this.setVisibility(GONE)有效(因为你说视图没有显示),但是this.setVisibility(VISIBLE)不是吗?您是否也在xml中设置了可见性?

我试过了,它对我有用。 this.setVisibility()和findViewById(...)。setVisibility()之间没有区别,因此您的代码应该正常工作。您是否可以更具体地了解何时调用方法show(CustomObject o)?你确定该方法没有返回

if(o.someCondition) return

请进一步详细说明您的问题,我会在您完成后回复编辑我的帖子,欢呼