web-dev-qa-db-ja.com

スピナーの背景色を変更しますが、矢印は保持します

私はそれについていくつかのことを読みましたが、必要なものが見つかりません。灰色の矢印を維持したいが、デフォルトのスタイルから水平バーを削除し、背景を白にしたい。私がこれをどのように行うことができるかご存知ですか?

ここに私が持っているものがあります(デフォルトのスピナースタイル):

enter image description here

ここに私が欲しいものがあります:

enter image description here

47
Mansur Khan

記録のために、簡単な解決策を見つけました。スピナーを相対レイアウトでラップし、画像を追加します。

 <RelativeLayout 
     Android:layout_width="fill_parent"
     Android:layout_height="wrap_content"
     Android:background="@drawable/borderbottom_white"<!-- white background with bottom border -->
     Android:layout_marginTop="15dp"  >
        <Spinner
        Android:id="@+id/postfield_category"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:textSize="16sp"
        Android:background="@null"
        Android:minHeight="0dp" />
        <ImageView 
         Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true"
        Android:layout_alignParentRight="true"
        Android:src="@drawable/arrowspinner" />
    </RelativeLayout>
29
Mansur Khan

@Mansur Khanの回答に基づいて少し変更を加えました。

この場合、スピナーにはすでに三角形の矢印があるため、ImageViewを追加する必要はありません。以下のコードを確認してください。

    <RelativeLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:padding="8dp"
        Android:background="#FFFFFF">
        <Spinner
            style="@style/Widget.AppCompat.DropDownItem.Spinner"
            Android:layout_width="match_parent"
            Android:layout_height="70dp"
            Android:id="@+id/sign_up_country"
            />
    </RelativeLayout>

これがスクリーンショットです

前: - enter image description here

後: enter image description here

72
Chandler

矢印の独自のドロアブルを作成する必要のない簡単な解決策は、スピナーをRelativeLayoutでラップし、スピナーではなくRelativeLayoutで背景色を設定することです。

<RelativeLayout
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:background="#f00" >
    <Spinner
        Android:id="@+id/spinner1"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content" />
</RelativeLayout>
23
Tad

これを使って:

yourspinner.setOnItemSelectedListener(this);
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
    ((TextView) yourspinner.getSelectedView()).setBackgroundColor(getResources()
            .getColor(R.color.your_color));
}

そして、クラスはOnItemSelectedListenerを実装する必要があります。

4
Kishan

こんにちは、LinearLayout、RelativeLayoutなどの親レイアウトの周りにSpinnerコンポーネントをラップする代わりに、レイアウト解析を増やすと、spinner_bg.xmlという名前のdrawableがdrawableフォルダーの下に作成されます。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <item>
        <bitmap
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:gravity="right"
            Android:src="@drawable/icn_dropdown_arw" />
    </item>
</layer-list>

Spinner_bgをスピナーの背景として設定すると、チャームのように機能します。

<Spinner  
     Android:layout_width="match_parent"
     Android:layout_height="wrap_content"
     Android:padding="5dp"
     Android:background="@drawable/spinner_bg" />
2

常にスピナー、ボタン、およびEditTextを使用し、ドロアブルを挿入する必要がある間は、フレームレイアウトで要素(スピナー、EditTextなど)をラップすることがよくあります。例を確認してください:

<FrameLayout
                                Android:layout_width="match_parent"
                                Android:layout_height="wrap_content">

                                <Spinner
                                    Android:id="@+id/spinner_component"                                
                                    Android:layout_width="match_parent"
                                    Android:layout_height="45dp"
                                    Android:background="@drawable/your_rectangle_style"
                                    Android:textColor="@color/your_text_color" />

                                <ImageView
                                    Android:layout_width="11dp"
                                    Android:layout_height="9dp"
                                    Android:src="@drawable/arrow_spinner"
                                    Android:layout_gravity="right|center_vertical"
                                    Android:layout_marginRight="7dp" />
                            </FrameLayout>

もう1つの重要なヒントは、FrameLayoutでは、たとえば、DrawableでOnClick関数を設定できることです。

1
Fellipe Tavares

スピナーやその他のAndroidコントロールをカスタマイズする良い方法は、 Android Asset Studio サイトを使用して Android Holo Colors Generator を選択することです。これにより、「下線」を含む必要なすべてのアセットが作成されます。また、変更を実装するXMLファイルも生成します。

そのサイトからZipファイルをダウンロードしたら、画像とXMLファイルをプロジェクトにコピーするだけです。

その後、必要な画像ファイルを編集して下線を削除できます。これらは9-Patchファイルで、次の名前が付けられています。

  • apptheme_spinner_default_holo_light.9.png
  • apptheme_spinner_disabled_holo_light.9.png
  • apptheme_spinner_focused_holo_light.9.png
  • apptheme_spinner_pressed_holo_light.9.png

プロセスのより完全な説明、およびサンプルXMLファイルの一部については、関連する回答を参照してください。

1

以下のレイアウトでは、スピナーに背景色が作成され、ドロップダウン矢印が表示されます。

  <LinearLayout
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight=".6"
        Android:background="@drawable/edit_text_rounded_shape"
        Android:gravity="center|center_vertical">
    <Spinner
        Android:id="@+id/spinerComanyName"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:padding="4dp"
        Android:layout_weight=".6"
        Android:layout_gravity="center"

        Android:entries="@array/spinner_item"
        Android:spinnerMode="dropdown"
        Android:theme="@style/Spinner"

        />
   </LinearLayout>

   <style name="Spinner">
    <!-- Used for the bottom line when not selected / focused -->
    <item name="colorControlNormal">@color/black</item>
    <item name="colorControlActivated">@color/colorPrimary</item>
    <!-- colorControlActivated & colorControlHighlight use the colorAccent          color by default -->
   </style>

背景色と丸い角を提供するedit_text_rounded_shape

   <?xml version="1.0" encoding="utf-8"?>

   <shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
         Android:shape="rectangle" Android:padding="10dp">
         <solid Android:color="@color/white"/>
         <stroke Android:color="@color/grey"/>
     <corners
     Android:bottomRightRadius="15dp"
     Android:bottomLeftRadius="15dp"
     Android:topLeftRadius="15dp"
     Android:topRightRadius="15dp"/>
  </shape>
1
Sumit Kumar
       Android:layout_alignParentRight="true"
        Android:layout_width="@dimen/spinner_width"
        Android:layout_height="wrap_content"
        Android:id="@+id/spnLocation"
        Android:entries="@array/labelFamily"
        Android:layout_centerVertical="true"

        Android:backgroundTint="@color/color_gray"

私のためのこの仕事

1
Muhammad Dawood

カスタムスピナーのコードは次のとおりです。それをチェックして教えてください。まだテストしていません。そのため、問題を解決できるかどうかを確認してからお知らせください。

<Spinner                                
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="@drawable/spinner_background"
    Android:gravity="center"
    Android:paddingRight="10dp"
    Android:spinnerMode="dropdown"
    Android:textColor="your text color"
    Android:textSize="your text size" />

以下は、スピナーの背景を作成するためのdrawable(spinner_background.xml)です。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >

    <item>
        <shape Android:shape="rectangle" >
            <solid Android:color="border color" />

            <corners Android:radius="3dp" />
        </shape>
    </item>
    <item
        Android:bottom="1dp"
        Android:left="1dp"
        Android:right="1dp"
        Android:top="1dp">
        <shape Android:shape="rectangle" >
            <solid Android:color="@Android:color/white" />

            <corners Android:radius="3dp" />
        </shape>
    </item>

</layer-list>

編集:

このリンクを確認してください。 スピナーの背景をカスタマイズ

OR

このようなことができます。

<RelativeLayout 
     Android:layout_width="fill_parent"
     Android:layout_height="wrap_content"
     Android:background="spinner background image">

        <Spinner       
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"        
        Android:background="@null"/>

        <ImageView 
         Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true"
        Android:layout_alignParentRight="true"
        Android:src="arrow image" />

    </RelativeLayout>
1
RIJO RV

複雑なレイアウトをしないで最良の方法はこれだと思います:

スピナーの背景にこのxmlを使用すると、準備完了です!!!

<item Android:state_pressed="true">
    <shape>
        <solid Android:color="@color/materialBlueGray600" />
        <corners Android:radius="3dp" />
    </shape>
</item>
<item Android:state_selected="true">
    <shape>
        <solid Android:color="@color/materialGray50" />
        <corners Android:radius="3dp" />
    </shape>
</item>
<item>
    <layer-list>
        <item>
            <shape>
                <solid Android:color="@color/materialGray50" />
                <corners Android:radius="3dp" />
            </shape>
        </item>

        <item Android:gravity="right">
            <bitmap Android:antialias="true"  Android:gravity="right" Android:src="@drawable/ic_expand_small" />
        </item>
    </layer-list>
</item>
0
Hadi Note