Android布局:合并到LinearLayout不显示所有字段

时间:2015-11-24 23:02:15

标签: android android-layout

我有一个自定义视图,我想通过删除多余的LinearLayout图层来优化布局。

我的自定义布局类似于:

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >
    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/text1"
        style="@style/textStyle"
        />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/text2"
        style="@style/textStyle"
        />
</merge>

我的片段的父布局类似于:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <com.mycompany.myprogram.MyCustomView
                android:id="@+id/customView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                />

             <SomeOtherView />

             <AnotherOtherView />

        </LinearLayout>
    </ScrollView>
</LinearLayout>

我的自定义LinearLayout类似于:

public class MyCustomView extends LinearLayout {

    @Bind(R.id.textView1) TextView textView1;
    @Bind(R.id.textView2) TextView textView2;

    public MyCustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initialize(context);
    }

    public ConfirmEditTextSection(Context context) {
        super(context);
        initialize(context);
    }

    private void initialize(Context context) {

        LayoutInflater.from(context).inflate(R.layout.layout_mycustomview, this, true);
        ButterKnife.bind(this, this);
    }
}

当我在充气后迭代子视图时,它们都在那里并且标记为可见。绑定也可以正常工作。但屏幕上只显示其中一个子视图。 LinearLayout似乎与其内容的高度不匹配;实际上它匹配一个项目的高度,但不是两者都匹配。

如果我只是将自定义视图的XML布局基类型更改为“LinearLayout”(而不是“merge”),则两个子视图都会按预期正确显示。但是我有一个额外的LinearLayout。

回顾一下,使用合并时,子视图在自定义类(LinearLayout的子类)中都存在(并且标记为可见),但屏幕上只显示一个子视图。

为了让我的LinearLayout自定义类正确显示其子视图,我还需要做些什么吗?

2 个答案:

答案 0 :(得分:3)

事实证明,我忘了明确设定方向。

添加

setOrientation(VERTICAL);

在我的膨胀呼叫之上解决了问题。

答案 1 :(得分:1)

尝试在ScrollView上使用android:fillViewport="true"

通常当ScrollView内部存在LinearLayout时,它未正确扩展。

 <ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <com.mycompany.myprogram.MyCustomView
            android:id="@+id/customView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            />

        <SomeOtherView />

        <AnotherOtherView />

    </LinearLayout>
</ScrollView>