私はそれについていくつかのことを読みましたが、必要なものが見つかりません。灰色の矢印を維持したいが、デフォルトのスタイルから水平バーを削除し、背景を白にしたい。私がこれをどのように行うことができるかご存知ですか?
ここに私が持っているものがあります(デフォルトのスピナースタイル):
ここに私が欲しいものがあります:
記録のために、簡単な解決策を見つけました。スピナーを相対レイアウトでラップし、画像を追加します。
<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>
@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>
これがスクリーンショットです
矢印の独自のドロアブルを作成する必要のない簡単な解決策は、スピナーを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>
これを使って:
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を実装する必要があります。
こんにちは、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" />
常にスピナー、ボタン、および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関数を設定できることです。
スピナーやその他のAndroidコントロールをカスタマイズする良い方法は、 Android Asset Studio サイトを使用して Android Holo Colors Generator を選択することです。これにより、「下線」を含む必要なすべてのアセットが作成されます。また、変更を実装するXMLファイルも生成します。
そのサイトからZipファイルをダウンロードしたら、画像とXMLファイルをプロジェクトにコピーするだけです。
その後、必要な画像ファイルを編集して下線を削除できます。これらは9-Patchファイルで、次の名前が付けられています。
プロセスのより完全な説明、およびサンプルXMLファイルの一部については、関連する回答を参照してください。
以下のレイアウトでは、スピナーに背景色が作成され、ドロップダウン矢印が表示されます。
<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>
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"
私のためのこの仕事
カスタムスピナーのコードは次のとおりです。それをチェックして教えてください。まだテストしていません。そのため、問題を解決できるかどうかを確認してからお知らせください。
<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>
複雑なレイアウトをしないで最良の方法はこれだと思います:
スピナーの背景にこの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>