这个问题在这里已有答案:
我在一个单独的行的表布局视图中有两个微调器和EditText控件。微调器中填充了数据。我的问题是填充到微调器中的数据(文本)太长而不适合屏幕大小。因此,旋转器被迫拉伸不必要地拉伸另一排上的其他控件。
对于我来说,在旋转器中显示文本是必须的。因此,使用省略号不是一种选择。如果有可能我怎样才能在纺纱机上包装冗长的文字?
步骤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步。自定义布局
现在我们应该以某种方式将singleLine
属性设置为false
在TextView
中使用的Spinner
,以显示列表中的项目。
在您的代码中,您可能在其中创建适配器以与Spinner
一起使用它:
this.mAdapter = ArrayAdapter.createFromResource(this, R.array.Planets,
android.R.layout.simple_spinner_dropdown_item);
我们的想法是将android.R.layout.simple_spinner_dropdown_item布局复制到您的项目中。然后通过在singleLine
中将false
属性设置为CheckedTextView
来修改它:
为此,使用下一个代码将文件添加到名为res/layout
的multiline_spinner_dropdown_item.xml
文件夹中:
<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
示例的屏幕截图:
定义自定义布局并将其与微调器和适配器一起使用。