我正在设计一个应用程序来浏览各种源代码。
要浏览我选择将它们放入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;
}