首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Spinner不会对文本进行换行--这是Android的bug吗?

Spinner不会对文本进行换行--这是Android的bug吗?
EN

Stack Overflow用户
提问于 2013-01-03 20:37:32
回答 14查看 43.8K关注 0票数 69

如果Spinner项目的文本太长,无法放入一行,则文本不会换行,而是会被截断。这只适用于应用编程接口级别的>= 11。这是Android 4.2.2 (左)和Android 2.3.3 (右)的截图,显示了错误的行为。

android:singleLine="false"在这里被忽略了。因此,像android:linesandroid:minLines等所有其他尝试一样,TextView似乎以某种方式比窗口宽度宽得多。

我看到其他人也有同样的问题,但没有人能找到解决方案。那么,这是一个系统错误吗?我不认为操作系统版本之间的这种不一致是故意的。

请注意:

有一些答案建议了相对简单的解决方案。

  • 编写自定义Adapter并覆盖getView()getDropDownView()。这不是这里的解决方案,因为在这一点上,仍然存在原始的问题:布局必须看起来如何处理正确的行wrapping?
  • Wrapping下拉式视图的TextView到父ViewGroup中。不适用于android:layout_width="match_parent",因为奇怪的是,父对象的宽度似乎是下拉式视图的固定宽度。这不适合不同宽度的Spinner
  • 当然,没有解决方案是手动将\n插入到文本中的任何位置。

使用以下代码进行重现:

更新:我也将其作为示例项目上传到GitHubDownload

/res/values/arrays.xml:

代码语言:javascript
复制
<string-array name="items">
    <item>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt.</item>
    <item>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est.</item>
</string-array>

/res/layout/spinner_item.xml:

代码语言:javascript
复制
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="?android:attr/spinnerDropDownItemStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="none"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:singleLine="false" />

设置Adapter

代码语言:javascript
复制
spinner.setAdapter(ArrayAdapter.createFromResource(this,
            R.array.items,
            R.layout.spinner_item));
EN

Stack Overflow用户

发布于 2016-08-26 00:13:04

我通过在文本中添加\n (新行)解决了这个问题(就这么简单)。

代码语言:javascript
复制
<string name="bmr1">sedentary (little or no exercise)</string>
<string name="bmr2">lightly active (light exercise/\nsports 1-3 days/week)</string>
<string name="bmr3">moderately active (moderate exercise/\nsports 3-5 days/week)</string>
<string name="bmr4">very active (hard exercise/\nsports 6-7 days a week)</string>
<string name="bmr5">extra active (very hard exercise/sports &amp;\nphysical job or 2x training)</string>

看起来像这样:

这是微调器作为行使用的布局:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/default_listview_row"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:singleLine="false"
    android:gravity="center_vertical"
    android:textColor="@android:color/white"
    android:background="@android:color/transparent"
    android:padding="5dp" />
票数 0
EN
查看全部 14 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14139106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档