【发布时间】:2012-09-24 23:47:26
【问题描述】:
我有一个ListView 和一个ArrayAdapter,它使用类似于simple_list_item_1 的XML 布局来扩充其内容。我在应用程序菜单中有两个选项来增加/减小文本大小。我设法通过覆盖ArrayAdapter 的getView 函数来修改ListView 中TextViews 的文本大小。像这样的:
adapter = new ArrayAdapter<Line>(MyActivity.this, R.layout.line_list, lines){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = (TextView) super.getView(position, convertView, parent);
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, fontSizeDp + zoom);
return textView;
}
};
listView.setAdapter(adapter);
菜单选项更改缩放值并调用adapter.notifyDataSetChanged(); 以使适配器更改文本大小。
在那之前一切正常。
问题是当我将文本大小减小太多时,每个 TextView 的高度都没有包裹其内容。 也就是说,ListView 项目太高了。当我增加文本大小时,项目高度没有问题。
如果我调用 super.getView(position, convertView, parent);在 convertView 为空的情况下,我使适配器始终膨胀。在这种情况下,由于高度被换行,因此减小文本大小可以正常工作。但是,我导致工作量过大,我不希望这样。
我尝试使列表视图和/或文本视图无效或强制布局,但没有成功。
感谢任何帮助
编辑:这是 line_list 布局:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="@dimen/lineTextSize"
android:gravity="center"
android:paddingLeft="6dip"
android:paddingRight="6dip" />
lineTextSize 默认为 22dp,大为 40dp
编辑 2: 看起来像这样
而不是这个屏幕:
【问题讨论】:
-
你能发布
R.layout.line_list文件吗? -
我之前测试过你的代码,它的工作原理应该是这样,
TextView正在包装TextView的内容,无论我如何修改大小。在我的测试中,fontSizeDp是一个常数,比如 17,我只是在onOptionsItemSelected回调中增加/减少了zoom变量,然后在适配器上调用notifyDataSetChanged。怎么修改大小? -
是的,就这样。在 onOptionsItemSelected 我更改缩放值,然后调用 adapter.notifyDataSetChanged()。我在平板电脑上测试 fontSizeDp 的初始值为 40。当我在某个点缩小时,线条的高度不再更新并且仍然太高
-
如果将
dp单位替换为sp单位(就像您从一开始就应该做的那样)字体大小,您会看到相同的行为吗? -
是的,我刚刚测试过,但行为是一样的
标签: android android-listview android-arrayadapter textview