我正在尝试在所有版本的Android上创建与Froyo相同的Spinners。为此,我正在使用HoloEverywhere。一些微调项目文本是多行,我希望它包装。
使用默认布局android.R.layout.simple_spinner_dropdown_item
或HoloEverywhere's drop-in replacement for it,对文本进行椭圆化处理,而不是将其包装。
将HoloEverywhere的布局作为自定义布局的起点,singleLine
设置为false
,ellipsize
设置为none
,layout_height
设置为wrap_content
没有帮助,文字仍然被删除。
向上显示所选项:
此方法适用于较新的设备。所有设备上的下拉项目布局都很好。但是当我使用自定义下拉项目布局时, Froyo 会使这个奇怪的文本重叠。每个选择都会堆积在最后一个选项之上。
这个问题: 关于Spinners中的文本换行的Spinner does not wrap text -- is this an Android bug?表明只有这样才能从头开始重新创建样式而不继承,但这听起来很疯狂,容易出问题。
my_simple_list_item_1.xml:
TextView
爪哇:
LinearLayout
答案 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%可靠且一致的结果。