0
我在我的佈局的底部添加了一個視圖,以在此元素的末尾添加一個行分隔符。問題是,在佈局中放置此視圖後會填充整個屏幕寬度,但是當我將視圖取出時,它將顯示爲正確的大小(我的測試中大約爲400dp)。爲什麼添加的視圖會導致佈局填滿整個屏幕。爲什麼添加視圖到我的佈局會改變整個佈局的寬度?
<?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="match_parent"
android:layout_gravity="start"
android:orientation="vertical"
android:paddingLeft="6dp"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/text_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:textColor="@android:color/darker_gray"
android:textSize="12sp"
tools:text="Hello, Label"
android:paddingBottom="6dp"
android:paddingLeft="6dp"/>
<TextView
android:id="@+id/text_error"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:textColor="@color/sr_red"
android:textSize="12sp"
tools:text="Error!"/>
</LinearLayout>
<!-- this View causes the parent layout to fill the whole screen width-->
<View
android:layout_width="wrap_content"
android:layout_height="1dp"
android:layout_marginTop="2dp"
android:background="@android:color/darker_gray"
/>
</LinearLayout>
這是導致問題的最底部。
我改變看法是這樣的:
val inputLayout = createLabelLayout(context, component.name, button)
viewGroup.addView(inputLayout.root)
inputLayout.setWidth(width)
這裏是相關類
private fun <T : View> createLabelLayout(context: Context, text: String, child: T): LabelLayout<T> {
val layout = LabelLayout(context, child)
layout.label.text = text
return layout
}
private class LabelLayout<out T : View>(context: Context, child: T) {
val root = LayoutInflater.from(context).inflate(R.layout.item_custom_field_label, null, false) as ViewGroup
val label = root.findViewById(R.id.text_label) as TextView
val error = root.findViewById(R.id.text_error) as TextView
init {
root.addView(child, root.childCount - 1)
}
fun setWidth(width: Int) {
val params = root.layoutParams
params.width = width
root.layoutParams = params
}
}
您的根'LinearLayout'的'width'和'height'設置爲'match_parent'。至少它的'height'應該是'wrap_content'。 –
正確,但我調用setWidth()時重置根元素的寬度。 而事情是如果我註釋掉xml中最底部的視圖(視圖是分隔線),那麼根元素將格式化爲正確的寬度。所以它似乎是導致問題的佈局中的最後一個視圖。 –