8

Android のすべてのバージョンで Froyo に戻って同じように見えるスピナーを作成しようとしています。そのために、私はHoloEverywhereを使用しています。スピナー アイテムのテキストの一部が複数行になっているため、折り返して表示したいと考えています。

デフォルトのレイアウト 、android.R.layout.simple_spinner_dropdown_itemまたはHoloEverywhere のドロップイン置換を使用すると、テキストはラップされずに省略されます。

HoloEverywhere のレイアウトを、singleLineset to falseellipsizeset to none、およびlayout_heightset toのカスタム レイアウトの開始点として使用wrap_contentしても、テキストはまだ途切れています。

をで囲むことにより、テキストをドロップダウンで正しく折り返すことができますが、FroyoTextViewデバイスでは、選択した項目 の表示が台無しになります。LinearLayoutユニフォームを着ることができないたびに、フロヨ・ジェイク・ウォートンを振り返って涙を流します。

この方法は、新しいデバイスでは問題なく機能します。ドロップダウン アイテムのレイアウトは、すべてのデバイスで問題ありません。しかし、Froyoでは、カスタム ドロップダウン アイテム レイアウトを使用すると、この奇妙なテキストの重なりが発生します。各選択は、最後の選択の上に積​​み上げられます。

この質問: Spinner はテキストをラップしません -- これは Android のバグですか? それを行う唯一の方法は、継承せずに最初からスタイリングを再作成することですが、それはクレイジーで問題が発生しやすいように聞こえます。

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> 

ジャワ:

    import org.holoeverywhere.widget.Spinner;

    spinner1.setAdapter(ArrayAdapter.createFromResource(this,
            R.array.array_of_strings, R.layout.my_simple_list_item_1));
4

2 に答える 2

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> 

テキストは、スピナーのドロップダウン ビュー内およびスピナーの表示された選択範囲内で折り返されます。

于 2013-04-12T22:54:17.117 に答える
0

上り坂を押しているようですね。私の推測では、クライアントはラップされたテキストで 100% 信頼できる一貫した結果を得ることは決してできないでしょう。

参照: スピナーがテキストを折り返さない -- これは Android のバグですか?

于 2013-04-02T00:33:36.790 に答える