为什么FrameLayout的孩子都可见或全部隐形?

时间:2011-12-25 18:02:51

标签: android layout

我有一段代码如下:

    super.onCreate(savedInstanceState);
    android.view.LayoutInflater inflater = (android.view.LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
    android.widget.FrameLayout fl=(android.widget.FrameLayout)inflater.inflate(R.layout.empty_layout, null);
    android.view.View l1=inflater.inflate(R.layout.main,fl);
    android.view.View l2=inflater.inflate(R.layout.second,fl);
    l2.setVisibility(View.VISIBLE);
    l1.setVisibility(View.VISIBLE);
    setContentView(fl);       

    Log.i("     ","l1 visibility: " + String.valueOf(l1.getVisibility()));
    Log.i("     ","l2 visibility: " + String.valueOf(l2.getVisibility()));

两个子布局都是可见的,没关系。 但是,当我尝试如下设置可见性时:

    l2.setVisibility(View.VISIBLE);
    l1.setVisibility(View.GONE);

两个孩子都有GONE的可见度,所以什么都看不到? 当我以相反的顺序设置可见性时:

    l1.setVisibility(View.GONE);
    l2.setVisibility(View.VISIBLE);

两个孩子再次可见! 我做错了什么?为什么setVisibility()对一个孩子有影响到另一个孩子(可能全部)?

========================= 8小时后:

好的,我找到了解决方案,但我仍然不知道原因。

解决方案是通过调用addView()而不是将根参数传递给LayoutInflater.inflate()来将视图添加到帧布局中。

在此解决方法之后,每个组件视图的可见性都会独立更改。

我不知道LayoutInflater.inflate()会发生什么。

=========================和一小时后1:

羞辱我。 LayoutInflater.inflate()返回根视图,如果它作为第二个参数提供,那么 每次我在第一个解决方案中设置根布局的可见性。 LayoutInflater一切都好!

1 个答案:

答案 0 :(得分:0)

尝试将其全部移动到一个main.xml布局(包含mainsecond),然后使用setContentView(R.layout.main)然后findViewById()加载它并检查设置能见度模式。