【问题标题】:Spinner with multi-line items overlaps selected item display on Froyo带有多行项目的微调器与 Froyo 上的选定项目显示重叠
【发布时间】:2013-04-02 00:23:57
【问题描述】:

我正在尝试创建在所有版本的 Android 上看起来都相同的 Spinner,回到 Froyo。为此,我使用HoloEverywhere。一些微调器项目文本超过一行,我希望它换行。

使用默认布局,android.R.layout.simple_spinner_dropdown_itemHoloEverywhere's drop-in replacement for it,省略而不是环绕文本。

将 HoloEverywhere 的布局作为自定义布局的起点,其中 singleLine 设置为 falseellipsize 设置为 nonelayout_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


【解决方案1】:

我找到了解决方案。由于微调器的初始显示只能处理文本视图,因此文本被换行,并且我找到了另一种建议使用线性布局的解决方案。这使得微调器的下拉列表看起来正确。事实证明,适配器有一个名为 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> 

现在文本在微调器的下拉视图中和在微调器显示的选择中换行。

【讨论】:

    【解决方案2】:

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

    见: Spinner does not wrap text -- is this an Android bug?

    【讨论】:

      猜你喜欢
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      相关资源
      最近更新 更多