TextViews没有占用视图中的set layout_weight

时间:2013-10-21 23:16:06

标签: java android android-layout textview

我的XML如下:

<LinearLayout
    android:orientation="vertical"
    android:id="@+id/llBottom"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="2" >
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:id="@+id/llPhone"
        android:layout_weight=".9"
        android:gravity="center" >
        <ImageView
            android:id="@+id/ivMyPhone"
            android:layout_width="@dimen/about_logo_size"
            android:layout_height="@dimen/about_logo_size"
            android:src="@drawable/andicon" />
    </LinearLayout>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:id="@+id/llPhoneInfo"
        android:layout_weight="1.1"
        android:weightSum="6"
        android:gravity="center" >
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:id="@+id/llBrand"
        android:layout_below="@+id/llPhone"
        android:weightSum="2"
        android:layout_weight="1"
        android:gravity="center" >
        <TextView
            android:id="@+id/tvBrand"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="Phone Brand: "
            android:layout_weight="1" />

        <TextView
            android:id="@+id/tvBrandName"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text=""
            android:layout_weight="1" />
    </LinearLayout>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:id="@+id/llModel"
        android:layout_below="@+id/llBrand"
        android:weightSum="2"
        android:layout_weight="1"
        android:gravity="center" >
        <TextView
            android:id="@+id/tvModel"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="Phone Model: "
            android:layout_weight="1" />

        <TextView
            android:id="@+id/tvModelName"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text=""
            android:layout_weight="1" />
    </LinearLayout>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:id="@+id/llVersion"
        android:layout_below="@+id/llModel"
        android:weightSum="2"
        android:layout_weight="1"
        android:gravity="center" >
        <TextView
            android:id="@+id/tvVersion"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="Android Version: "
            android:layout_weight="1" />

        <TextView
            android:id="@+id/tvVersionNumber"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text=""
            android:layout_weight="1" />
    </LinearLayout>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:id="@+id/llCode"
        android:layout_below="@+id/llVersion"
        android:weightSum="2"
        android:layout_weight="1"
        android:gravity="center" >
        <TextView
            android:id="@+id/tvCode"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="Android Codename: "
            android:layout_weight="1" />

        <TextView
            android:id="@+id/tvCodeName"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text=""
            android:layout_weight="1" />
    </LinearLayout>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:id="@+id/llAPI"
        android:layout_below="@+id/llCode"
        android:weightSum="2"
        android:layout_weight="1"
        android:gravity="center" >
        <TextView
            android:id="@+id/tvAPI"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="API Level: "
            android:layout_weight="1" />

        <TextView
            android:id="@+id/tvAPILevel"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text=""
            android:layout_weight="1" />
    </LinearLayout>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:id="@+id/llScreen"
        android:layout_below="@+id/llAPI"
        android:weightSum="2"
        android:layout_weight="1"
        android:gravity="center" >
        <TextView
            android:id="@+id/tvScreen"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="Screen Size (WxH): "
            android:layout_weight="1" />

        <TextView
            android:id="@+id/tvScreenSize"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text=""
            android:layout_weight="1" />
    </LinearLayout>
    </LinearLayout>
</LinearLayout>

显示以下内容:

enter image description here

我希望徽标从顶部占据屏幕的1/4,其余信息应该是屏幕的3/4。但出于某种原因,他们都聚集在一起。我该如何解决?

我想做以下(草图):

enter image description here

2 个答案:

答案 0 :(得分:1)

这里有很多代码重复。在我看来,你应该只有一个带有ImageView和listView的线性布局。在线性布局内以编程方式为两个子视图使用布局权重。有很多很好的教程可以设置自定义列表视图。这个涵盖了您需要的一切。 AndroidListView

答案 1 :(得分:1)

  

我希望徽标从顶部占据屏幕的1/4   其余的信息应该是屏幕的3/4

您需要执行以下操作。从android:weightSum移除属性llBottom,在android:layout_weight中将llPhone设置为1,在android:layout_weight中将llPhoneInfo设置为3。

权重的总和将为4,llPhone占据屏幕的1/4,llPhoneInfo将占据屏幕的3/4。

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

    <LinearLayout
        android:id="@+id/llPhone"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="horizontal" >

        <ImageView ... />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/llPhoneInfo"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="3"
        android:gravity="center"
        android:orientation="vertical"
        android:weightSum="6" >

        ...    

   </LinearLayout>

</LinearLayout>

对其他布局进行类似的计算。

您还应考虑使用RelativeLayout代替多个嵌套LinearLayouts以获得更好的效果。