私が試したことからSpinner
、テーマを使用している間に複数行のドロップダウン項目を達成することはできません。Holo
回避策は次のとおりです。
Spinner
から継承しないのスタイルを作成しますHolo
。これにより、複数行のドロップダウン アイテムが有効になります。
- テーマのように見えるように、スピナーを「手動で」スタイリングし
Holo
ます。
これにより生成されます(閉じた状態と開いた状態を示します):
実装の詳細:
ドロップダウン項目の属性をに設定してカスタム レイアウトを指定したとしても、私が知る限り、Holo
テーマを継承しSpinner
てドロップダウン項目に複数の行を表示する方法はありません。私もスタイルを維持しようとしましたが、Spinner
TextView
singleLine
false
Holo
android:spinnerStyle
android:spinnerItemStyle
android:spinnerDropDownItemStyle
スタイル属性 (これらの属性の使用例はこちら) ですが、複数行の結果を生成することはできませんでした。
ただし、 のスタイルをオーバーライドし、からSpinner
継承しない場合:spinnerStyle
Holo
<style name="AppTheme" parent="android:Theme.Holo.Light">
<item name="android:spinnerStyle">@style/spinnerStyle</item>
</style>
<--no parent attribute-->
<style name="spinnerStyle">
<item name="android:clickable">true</item>
</style>
ドロップダウン項目は複数行の表示をサポートします。しかし、今では のHolo
テーマが失われSpinner
、閉じた状態は ではなく、矢印や視覚的な手がかりがないTextView
ように見えます。代わりに親を:に設定すると:Spinner
Spinner
spinnerStyle
parent="android:style/Widget.Spinner
<style name="spinnerStyle" parent="android:style/Widget.Spinner">
<item name="android:clickable">true</item>
</style>
閉じた状態では矢印が表示されますが、アプリでは場違いに見えるSpinner
グレーのプレホロのようなスタイルになります。Spinner
Holo
したがって、考えられる解決策は次のとおりです。
- テーマをオーバーライドし、親に
spinnerStyle
は使用しないでください。Holo
これにより、ドロップダウン項目で複数行のテキストが有効になります。
- テーマ
Spinner
を継承するように背景を変更します。Holo
次に例を示します。
基本的なアクティビティを作成します:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Spinner spinner = (Spinner)findViewById(R.id.styled_spinner);
spinner.setAdapter(ArrayAdapter.createFromResource(this,
R.array.items,
R.layout.spinner_item));
}
アクティビティのレイアウト:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="50dip"
tools:context=".MainActivity" >
<Spinner
android:id="@+id/styled_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
スタイル:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AppTheme" parent="android:Theme.Holo.Light">
<item name="android:spinnerStyle">@style/spinnerStyle</item>
</style>
<style name="spinnerStyle">
<item name="android:clickable">true</item>
<item name="android:background">@drawable/spinner_background_holo_light</item>
</style>
</resources>
drawable フォルダーに、spinner_background_holo_light を配置します。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false"
android:drawable="@drawable/spinner_disabled_holo_light" />
<item android:state_pressed="true"
android:drawable="@drawable/spinner_pressed_holo_light" />
<item android:state_pressed="false" android:state_focused="true"
android:drawable="@drawable/spinner_focused_holo_light" />
<item android:drawable="@drawable/spinner_default_holo_light" />
</selector>
これらのドローアブルをdrawables-hdpi
フォルダーに含めます。
spinner_default_holo_light.9.png
spinner_disabled_holo_light.9.png
spinner_focused_holo_light.9.png
spinner_pressed_holo_light.9.png
Holo
これにより、上記のスクリーンショットに示すように、 をテーマにした閉じた状態と複数行の項目を持つスピナーが生成されます。
この例のドロップダウン項目は テーマではありませんHolo
が、ドロップダウン項目の複数行表示が本当に重要な場合は、おそらく許容できるトレードオフです。
この例では、マニフェストでtoとto をandroid:minSdkVersion
設定しました。14
android:targetSdkVersion
17
Holo
グラフィックスとspinner_background_holo_light.xml
コードは、HoloEverywhere Copyright (c) 2012 Christophe Versieux、Sergey Shatunov から提供されています。ライセンスの詳細については、リンク先の github プロジェクトを参照してください。