【发布时间】:2013-04-02 00:23:57
【问题描述】:
我正在尝试创建在所有版本的 Android 上看起来都相同的 Spinner,回到 Froyo。为此,我使用HoloEverywhere。一些微调器项目文本超过一行,我希望它换行。
使用默认布局,android.R.layout.simple_spinner_dropdown_item 或 HoloEverywhere's drop-in replacement for it,省略而不是环绕文本。
将 HoloEverywhere 的布局作为自定义布局的起点,其中 singleLine 设置为 false,ellipsize 设置为 none,layout_height 设置为 wrap_content 没有帮助,文本仍然被切断。
我可以通过将TextView 包裹在LinearLayout 中来使文本正确包裹在下拉列表中,但是在Froyo 设备上,这会弄乱选定项:
此方法适用于较新的设备。下拉项目布局适用于所有设备。但是,当我使用自定义下拉项布局时,Froyo 会使这个奇怪的文本重叠。每个选择都堆积在最后一个之上。
这个问题: Spinner does not wrap text -- is this an Android bug? 关于 Spinners 中的文本换行建议唯一的方法是从头开始重新创建样式而不继承,但这听起来很疯狂并且容易出现问题。
my_simple_list_item_1.xml:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dp"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/android:text1"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:ellipsize="marquee"
android:layout_gravity="center_vertical"
android:singleLine="false"/>
</LinearLayout>
Java:
import org.holoeverywhere.widget.Spinner;
spinner1.setAdapter(ArrayAdapter.createFromResource(this,
R.array.array_of_strings, R.layout.my_simple_list_item_1));
【问题讨论】:
-
请注意,其中涉及两个样式文件,一个用于下拉列表项,一个用于选定列表项(听起来像是重叠的那个)。您是否明确设置所选样式?
-
另外,你有没有试过只给布局一个背景,这样即使它重叠,你也看不到下面的东西?
-
嘿,bladiblah,感谢您的回复。我不相信我正在明确设置选定的样式。然而,为了检查发生了什么,我确实给了它一个背景。我真的希望这会奏效,但不幸的是它以错误的方式堆叠。如果我在 textview 上放置背景,我只会看到微调器中的第一个可选项目(或数组中的第一个项目)。似乎当它堆叠新的东西时,它会低于旧的东西,所以添加背景只会让我看到第一个选择。
-
有没有办法可以显式设置选中的列表项?
标签: android android-layout styles android-spinner android-holo-everywhere