1

我正在设计一个应用程序来浏览杂项源代码。为了浏览这些行,我选择将它们放入ListView. 我已经建立了我的自定义Adapter来处理自定义项目布局。所有的高度都设置为 wrap_content,但 android 似乎并不关心这一点,行之间有一个烦人的空格。

图片

如果我以编程方式手动将 layoutParams 中的高度值设置为固定值,即 30,则问题是“固定的”,但我发现这个解决方案很难看,并且想了解这种不需要的间距的原因。

这是我的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/sourcerow"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:orientation="horizontal"
    android:padding="0dip"
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:weightSum="1.0" >

    <TextView
        android:id="@+id/linenumber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.06"
        android:minWidth="30dip"
        android:padding="0dip"
        android:text="@string/line" />

    <HorizontalScrollView
        android:id="@+id/horizontalScrollView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.94"
        android:padding="0dip" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:padding="0dip" >

            <TextView
                android:id="@+id/indent"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="0dip"
                android:text=""
                android:textAlignment="viewStart" />

            <TextView
                android:id="@+id/thecode"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="0dip"
                android:text="@string/code"
                android:textAlignment="viewStart" />
        </LinearLayout>
    </HorizontalScrollView>

</LinearLayout>

最后这是我的 Adapter getView 方法:

@Override
public View getView(int pos, View v, ViewGroup vg) {
    codeLine entry = code.getCode().get(pos);
    if (null == v) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.source_row, null);
    }
    if(pos%2==0) v.setBackgroundResource(R.drawable.selector_1);
    else v.setBackgroundResource(R.drawable.selector_2);
    LinearLayout row = (LinearLayout) v.findViewById(R.id.sourcerow);
    TextView linenumber = (TextView) v.findViewById(R.id.linenumber);
    TextView linecode = (TextView) v.findViewById(R.id.thecode);
    TextView indent = (TextView) v.findViewById(R.id.indent);
    linenumber.setText(Integer.toString(pos+1));
    indent.setText(indent(entry.getDepth()));
    linecode.setText(Html.fromHtml(entry.getCode()));
    AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT);
    row.setLayoutParams(params);
    row.setPadding(0, 0, 0, 0);
    return v;
}
4

0 回答 0