2017-10-11 45 views
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 
    } 
} 
+0

您的根'LinearLayout'的'width'和'height'設置爲'match_parent'。至少它的'height'應該是'wrap_content'。 –

+0

正確,但我調用setWidth()時重置根元素的寬度。 而事情是如果我註釋掉xml中最底部的視圖(視圖是分隔線),那麼根元素將格式化爲正確的寬度。所以它似乎是導致問題的佈局中的最後一個視圖。 –

回答

0

好了,我通過改變兩個根的LinearLayout和孩子的LinearLayout來修復這個問題包裝內容。在我只改變父佈局寬度之前。

相關問題