具有多行项目的微调器与Froyo上的所选项目显示重叠

时间:2013-04-02 00:23:58

标签: android android-layout styles android-spinner android-holo-everywhere

我正在尝试在所有版本的Android上创建与Froyo相同的Spinners。为此,我正在使用HoloEverywhere。一些微调项目文本是多行,我希望它包装。

使用默认布局android.R.layout.simple_spinner_dropdown_itemHoloEverywhere's drop-in replacement for it,对文本进行椭圆化处理,而不是将其包装。

将HoloEverywhere的布局作为自定义布局的起点,singleLine设置为falseellipsize设置为nonelayout_height设置为wrap_content没有帮助,文字仍然被删除。

向上显示所选项: Every time you can't get a uniform look  back to froyo jake wharton sheds a single tear.

此方法适用于较新的设备。所有设备上的下拉项目布局都很好。但是当我使用自定义下拉项目布局时, Froyo 会使这个奇怪的文本重叠。每个选择都会堆积在最后一个选项之上。

这个问题:  关于Spinners中的文本换行的Spinner does not wrap text -- is this an Android bug?表明只有这样才能从头开始重新创建样式而不继承,但这听起来很疯狂,容易出问题。

my_simple_list_item_1.xml:

TextView

爪哇:

LinearLayout

2 个答案:

答案 0 :(得分:8)

我找到了解决方案。文本是包装的,因为微调器初始显示只能处理文本视图,我找到了另一个推荐使用线性布局的解决方案。这使得微调器的下拉看起来是正确的。事实证明,适配器有一个名为setDropDownViewResource()的资源,它允许您为下拉列表设置不同于微调器选择中显示的视图。

 import org.holoeverywhere.widget.Spinner;

 ArrayAdapter adapter1 = ArrayAdapter.createFromResource(this,R.array.array_of_strings,R.layout.simple_list_item_1);
 adapter1.setDropDownViewResource(R.layout.my_simple_list_item_1);
 spQ1.setAdapter(adapter1);

在这个例子中,simple_list_item是android提供的默认视图,mY_simple_list_item是

<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> 

现在文本包含在微调器的下拉视图内并显示在微调器中。

答案 1 :(得分:0)

听起来你正在上坡。我的猜测是,您的客户永远无法通过包装文本获得100%可靠且一致的结果。

请参阅: Spinner does not wrap text -- is this an Android bug?