我有一个自定义视图,我想通过删除多余的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自定义类正确显示其子视图,我还需要做些什么吗?
答案 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>