为 Android 应用程序重置 Listview 行中的 TextView 位置
Reset TextView position in row of Listview for Android Application
我正在使用 ListView 来显示一些数据。数据显示在 TextView 中。显示的字符串长度可能会有所不同。因此显示的文本视图会根据字符串的长度更改其位置。我面临的问题是
假设有 5 行。对于第 3 行,如果文本很长,则显示文本的 textview 的位置会调整以显示内容。但是,即使文本较小,其他行的文本视图位置也会发生变化。这与 ListView 行缓存有关我不知道如何重置行。
行布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="100dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="@dimen/text_margin_bottom"
android:orientation="horizontal">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/id1"
android:textSize="@dimen/textsize_content3" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/id2"
android:textSize="@dimen/textsize_content3" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="@dimen/text_margin_bottom"
android:orientation="horizontal">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/id3"
android:textSize="@dimen/textsize_content3" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/id4"
android:textSize="@dimen/textsize_content3" />
</LinearLayout>
</LinearLayout>
获取查看代码
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
ShowData metaData = getItem(position);
if (convertView == null) {
convertView = inflater.inflate(R.layout.row, parent, false);
holder = new ViewHolder();
holder.id1 = (TextView) convertView
.findViewById(R.id.id1);
holder.id2 = (TextView) convertView
.findViewById(R.id.id2);
holder.id3 = (TextView) convertView
.findViewById(R.id.id3);
holder.id3 = (TextView) convertView
.findViewById(R.id.id4);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
convertView.invalidate();
holder.id1.setText(metaData.id1);
holder.id2.setText(metaData.id2);
holder.id3.setText(metaData.id3);
holder.id4.setText(metaData.id4);
return convertView;
}
如何重置列表视图行?
如您所述,由于 layout_height
的 wrap_content
值,您的 TextView
正在垂直调整大小。似乎当 View
s 在 ListView
s 中被回收时(并且很可能是所有 AdapterView
s),没有自动触发布局,因此 TextView
s 将保留他们以前的高度。对它们调用 requestLayout()
将触发布局事件,在此期间 TextView
将调整为新内容。
我正在使用 ListView 来显示一些数据。数据显示在 TextView 中。显示的字符串长度可能会有所不同。因此显示的文本视图会根据字符串的长度更改其位置。我面临的问题是 假设有 5 行。对于第 3 行,如果文本很长,则显示文本的 textview 的位置会调整以显示内容。但是,即使文本较小,其他行的文本视图位置也会发生变化。这与 ListView 行缓存有关我不知道如何重置行。
行布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="100dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="@dimen/text_margin_bottom"
android:orientation="horizontal">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/id1"
android:textSize="@dimen/textsize_content3" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/id2"
android:textSize="@dimen/textsize_content3" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="@dimen/text_margin_bottom"
android:orientation="horizontal">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/id3"
android:textSize="@dimen/textsize_content3" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/id4"
android:textSize="@dimen/textsize_content3" />
</LinearLayout>
</LinearLayout>
获取查看代码
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
ShowData metaData = getItem(position);
if (convertView == null) {
convertView = inflater.inflate(R.layout.row, parent, false);
holder = new ViewHolder();
holder.id1 = (TextView) convertView
.findViewById(R.id.id1);
holder.id2 = (TextView) convertView
.findViewById(R.id.id2);
holder.id3 = (TextView) convertView
.findViewById(R.id.id3);
holder.id3 = (TextView) convertView
.findViewById(R.id.id4);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
convertView.invalidate();
holder.id1.setText(metaData.id1);
holder.id2.setText(metaData.id2);
holder.id3.setText(metaData.id3);
holder.id4.setText(metaData.id4);
return convertView;
}
如何重置列表视图行?
如您所述,由于 layout_height
的 wrap_content
值,您的 TextView
正在垂直调整大小。似乎当 View
s 在 ListView
s 中被回收时(并且很可能是所有 AdapterView
s),没有自动触发布局,因此 TextView
s 将保留他们以前的高度。对它们调用 requestLayout()
将触发布局事件,在此期间 TextView
将调整为新内容。