web-dev-qa-db-ja.com

スピナーアイテム間のディバイダーを表示する方法は?

仕切りのあるリストビューとエキスパンドビューを使用して設定できますが、スピナーではアイテム間の仕切りがないように見えます。

これを修正する方法を知っている人?

24
RickardP

同じ問題を抱えている人々のために、私はほとんどあきらめた後、分周器を取得する方法のアイデアを得ました。

各アイテムのカスタムレイアウトの下部に分割線を追加しました

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout Android:id="@+id/RelativeLayout01"
    Android:layout_width="fill_parent" Android:layout_height="fill_parent"
    xmlns:Android="http://schemas.Android.com/apk/res/Android" style="@style/ListItem2">

    <TextView Android:id="@+id/Text" Android:layout_width="fill_parent"
        Android:layout_height="wrap_content" Android:layout_alignParentLeft="true"
        style="@style/SpinnerView_Text" Android:paddingLeft="10dip" />

    <ImageView Android:id="@+id/icon" Android:layout_width="wrap_content"
        Android:layout_height="wrap_content" Android:src="@drawable/arrowright"
        Android:layout_alignParentRight="true" Android:layout_centerInParent="true"
        Android:layout_marginRight="20dip" />

</RelativeLayout>

<ImageView Android:id="@+id/Divider1" Android:layout_width="fill_parent"
    Android:layout_height="1dip" style="@style/Divider"></ImageView>
2
RickardP

これは私のために働きました:

<style name="SpinnerStyle" parent="Widget.AppCompat.ListView.DropDown">
        <item name="Android:divider">#d1d1d1</item>
        <item name="Android:dividerHeight">0.5dp</item>
    </style>

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="Android:dropDownListViewStyle">@style/SpinnerStyle</item>

これを使用する利点は、ホバー時の波及効果を取り除かないことです。

22
X09

私はこの問題のより適切な解決策を見つけることができました(単一アイテムのレイアウトにディバイダーを含めないで)。

あなたがしなければならないことはあなたの活動のテーマで定義することです

        <item name="Android:dropDownListViewStyle">@style/App.Style.Spinner</item>

次に適切なスタイルを作成します

   <style name="App.Style.Spinner" parent="@style/Widget.Sherlock.Light.ListView.DropDown">
           <item name="Android:dividerHeight">10dip</item>
           <item name="Android:divider">@drawable/mydivider</item>
   </style>
15
Talihawk

@Talihawkの回答に基づいて、私はspecificスピナーのみで動作するようにしました。アクティビティのテーマを設定する代わりに、スピナービューに直接テーマを設定します。

<style name="MatchSpinnerStyle" parent="Android:style/Widget.ListView.DropDown">
    <item name="Android:divider">#123456</item>
    <item name="Android:dividerHeight">1dp</item>
</style>

<style name="MatchSpinnerTheme" parent="AppTheme">
    <item name="Android:dropDownListViewStyle">@style/MatchSpinnerStyle</item>
</style>

そして

<Android.support.v7.widget.AppCompatSpinner
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"        
    Android:theme="@style/MatchSpinnerTheme"/>
10
YTerle

申し訳ありませんが、質問されてから数年は答えていますが、解決策は非常に簡単です。簡単なことを行うだけです。 style.xmlファイルに移動し、このアイテムをアクティブなテーマに追加します

 <item name="Android:dropDownListViewStyle">@style/MySpinner</item> 

この後、MySpinnerという名前の別のテーマを追加し、アクティブなテーマの同じ親を追加します

 <style name="MySpinner" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="Android:dividerHeight">2dp</item>
    <item name="Android:divider">#000</item>
</style>

これにより、単一のアイテムが分離され、単一のアイテムの上にホバーしている間、セパレーターは表示されません

ただし、これを行う間、アクティビティのすべてのスピナーにこのテーマを適用しています。これで、すべてのスピナーがこの同じスピナーテーマで動作するようになります。

0