在xml中设置List项目行高无效

时间:2014-09-17 04:34:09

标签: android xml

我尝试在xml文件中设置列表项行高。例如,我有一个listView和一个相应的listAdapter,这个适配器从xml文件中膨胀一个视图:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:orientation="horizontal" >

        <ImageView 
            android:id="@+id/indicator"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:src="@drawable/ic_right"/>

        <TextView
            android:id="@+id/info"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:padding="20dp"
            android:textSize="16sp"
            android:textColor="#f96f00"
            android:layout_gravity="center"
            android:lines="1"
            android:ellipsize="end"
            />

        <TextView
            android:id="@+id/number"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:textSize="12sp"
            android:paddingRight="10dp"
            />
    </LinearLayout>

但是这个60dp没有效果,无论你设置多少这个高度,膨胀的行视图都有一个固定的高度。当我调整布局中的textview时,行高已更改。为什么会发生这种情况,如何将列表项行的高度分配给固定的指标?

3 个答案:

答案 0 :(得分:2)

我查看了LayoutInfalter的infalte函数的源代码,如果root为null,则不会为此视图生成LayoutParams,并且在附加到其他视图时将使用默认的layoutParams。如果设置了root,则inflater将为此视图生成并设置LayouParams。但是,attachToRoot不能设置为true,因此View get将很快添加到适配器视图中。

View v = inflater.inflate(R.layout.filtered_trip_row, parent,false);

这解决了我的问题。

答案 1 :(得分:0)

好吧,没必要恐慌它发生了。

在适配器的getView中,只需在返回视图之前编写此代码。

// Just reset the layout parms before return
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                            60*3); // put proper dp pixel conversion here, in hdpi it 3px = 1dp

    view.setLayoutParams(params);
    return view;

答案 2 :(得分:0)

请在给行充气时检查'parent'参数为null,

View v = inflater.inflate(R.layout.filtered_trip_row, null);

相反,试试这个,

View v = inflater.inflate(R.layout.filtered_trip_row, parent);

现在尝试在getView中设置你的身高。

希望这会对你有所帮助。