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

Mic*_*uff 8 android styles android-layout android-spinner android-holo-everywhere

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

使用默认布局,android.R.layout.simple_spinner_dropdown_item或者HoloEverywhere的直接替换,可以对文本进行椭圆化处理,而不是将其包裹起来.

将HoloEverywhere的布局作为自定义布局的起点,singleLine设置为false,ellipsize设置为none,并layout_height设置为wrap_content无效,文本仍然被切断.

可以将文本正确地包装在下拉列表TextViewLinearLayout,但是在Froyo设备上,这会弄乱所选项目的显示: 每次你不能得到制服回头看看froyo jake wharton流下了一滴眼泪.

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

这个问题: Spinner不会包装文本 - 这是一个Android错误吗?关于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> 
Run Code Online (Sandbox Code Playgroud)

Java的:

    import org.holoeverywhere.widget.Spinner;

    spinner1.setAdapter(ArrayAdapter.createFromResource(this,
            R.array.array_of_strings, R.layout.my_simple_list_item_1));
Run Code Online (Sandbox Code Playgroud)

Mic*_*uff 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);
Run Code Online (Sandbox Code Playgroud)

在这个例子中,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> 
Run Code Online (Sandbox Code Playgroud)

现在,文本包含在微调器的下拉视图内并在微调器显示的选择中.