如何在旋转器中换行长文本?

21

在表格布局视图中,我有两个下拉框和EditText控件,它们位于单独的一行。这些下拉框是由数据填充的。我的问题是填充到下拉框中的文本太长了,无法适应屏幕大小。因此,下拉框被迫不必要地拉伸,拉伸了另一行上的其他控件。

对于我来说,必须显示下拉框中的文本。因此,使用省略号不是一个选择。如果可能的话,我该如何在下拉框中自动换行呢?

2个回答

61

步骤1.带换行文本的TextView

第一步是强制让简单的TextView支持换行文本。很容易实现:

<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:singleLine="false"
    android:text="very long text that will be wrapped to next line" />

注意这里的singleLine属性。

步骤2. 自定义布局

现在我们需要在Spinner使用的TextView中将singleLine属性设置为false,以便在列表中显示该项。

在您的代码中,可能有一个地方用于创建适配器,并将其与Spinner一起使用:

this.mAdapter = ArrayAdapter.createFromResource(this, R.array.Planets,
                android.R.layout.simple_spinner_dropdown_item);

这个想法是将android.R.layout.simple_spinner_dropdown_item布局复制到您的项目中。然后通过在CheckedTextView中设置 singleLine 属性为false,对其进行修改:

为此,请将文件添加到名为multiline_spinner_dropdown_item.xmlres/layout文件夹中,并使用以下代码进行修改:

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="?android:attr/spinnerDropDownItemStyle"
    android:singleLine="false"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:ellipsize="marquee" />

请注意,此文件与android.R.layout.simple_spinner_dropdown_item布局完全相同,只是现在将singleLine设置为false

步骤3. 使用自定义布局创建适配器

修改您的适配器创建代码为:

this.mAdapter = ArrayAdapter.createFromResource(this, R.array.Planets,
                 R.layout.multiline_spinner_dropdown_item);
这是来自修改后的 Android SDK 中 SpinnerActivity 示例的截图:

在此输入图片描述


1
谢谢!我刚刚按照您的步骤操作,现在它可以正常工作了。但是,在从下拉列表中选择一个选项后(并且下拉列表已折叠),文本太长而无法适应屏幕。我该如何缩短它或将其显示为多行? - aby
5
在搜索多行旋转器时,我偶然发现了这个答案,它非常好用 :) 不过我的旋转器选项超过了两行,所以在 multiline_spinner_dropdown_item.xml 中,我不得不设置 android:layout_height="wrap_content"android:ellipsize="none",以便所有文本都能显示在选项列表中。 - AndroidNoob
1
很好的建议...但要注意API 14的下载源文件。行android:layout_height="?android:attr/listPreferredItemHeight"拼写错误为android:layout_height="?android:attr/ListPreferredItemHeight"(注意大写L),导致错误。 - Ted Betz
10
ICS 4.0.4出现故障,有什么解决方法吗? - Shardul
"android.R.layout.simple_spinner_dropdown_item" 的链接已失效(404)。 - Pang
显示剩余4条评论

-4

定义一个自定义布局并将其与Spinner和适配器一起使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接