ViewStub 和 include 中 根view设置宽高都等于 wrap_content的问题
如下:
<ViewStub
android:id="@+id/stub_normal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout="@layout/layout_pay_setting_normal" />
这是我引用的布局文件 layout_pay_setting_normal.xml
<?xml version="1.0" encoding="utf-8"?>
<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="48dp"
android:background="@color/color_ff"
android:gravity="center_vertical"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/default_view_cost"
android:textColor="@color/color_33"
android:textSize="14sp" />
<EditText
android:id="@+id/normal_cost"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@null"
android:gravity="right|center_vertical"
android:hint="@string/default_moment_cost"
android:inputType="number"
android:textColorHint="@color/color_99"
android:textSize="14sp" />
<TextView
android:id="@+id/normal_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="秒/条"
android:textColor="@color/color_33"
android:textSize="14sp"
android:visibility="gone" />
</LinearLayout>
以上根布局layout_height=”48dp”在viewstub 引用后失效,后来我在外面又套了层布局(如下代码)就没问题了:
<?xml version="1.0" encoding="utf-8"?>
<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="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@color/color_ff"
android:gravity="center_vertical"
android:paddingLeft="15dp"
android:paddingRight="15dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/default_view_cost"
android:textColor="@color/color_33"
android:textSize="14sp" />
<EditText
android:id="@+id/normal_cost"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@null"
android:gravity="right|center_vertical"
android:hint="@string/default_moment_cost"
android:inputType="number"
android:textColorHint="@color/color_99"
android:textSize="14sp" />
<TextView
android:id="@+id/normal_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="秒/条"
android:textColor="@color/color_33"
android:textSize="14sp"
android:visibility="gone" />
</LinearLayout>
</LinearLayout>
猜测原因:这可能是因为在ViewStub或者include 进行inflate时(尤其是ViewStub设置了高为wrap_content),无论最外层布局宽高多大,都按照wrap_content来处理的,因此,除非子 view有个明确的高度,否则最外层宽高设置将失效。
修正后的layout_pay_setting_normal.xml中,计算view大小时测得子 view高度为48dp,因此ViewStub inflate后的view需要的高度为48dp,除非ViewStub自己重新设置layout_height的高度