ドロップダウン矢印をSpinner
の放出テキスト要素の近くに設定する必要があります。どうすればこれを達成できますか?
<Spinner Android:id="@+id/spinner"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
これを修正するには、xmlでカスタム背景を定義し、右側から矢印のマージンを設定します。
長方形の背景と矢印のビットマップオブジェクトを使用してレイヤーリストを定義することから始めます。重力を設定することで矢印を右側の中心に揃えることができ、Android: "right"属性を使用して右マージンを設定することで矢印を中心に向かって移動できます。これはテキストの長さに基づいて矢印を動的に移動するわけではありませんが、最初のステップとして役立つはずです。
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="@color/color_white" />
<corners Android:radius="2.5dp" />
</shape>
</item>
<item Android:right="64dp">
<bitmap
Android:gravity="right|center_vertical"
Android:src="@drawable/ic_spinner" />
</item>
</layer-list>
これは、選択したスピナーアイテムcustom_spinner_item.xmlのカスタムレイアウトを作成することで実現できます。現在選択されているスピナーアイテムを表示するTextViewを追加しました。矢印アイコンがImageViewに追加されます。任意のアイコンを使用できます。矢印アイコンは、テキストの長さに応じて移動しますが、 TheoKanning の回答では達成できません。実際、このレイアウトでスピナーの外観を完全に変更できます。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_vertical"
Android:orientation="horizontal">
<TextView
Android:id="@+id/spinner_item_text"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_vertical"
Android:paddingLeft="10dp"
Android:paddingRight="10dp"/>
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_vertical"
Android:src="@mipmap/ic_arrow_down"/>
</LinearLayout>
カスタムスピナーアダプターを作成し、上のビューを膨らませます。また、デフォルトのgetView()メソッドをオーバーライドして、リストから選択したスピナーアイテムのテキストを設定します。
public class CustomSpinnerAdapter extends ArrayAdapter<String> {
LayoutInflater inflater;
List<String> spinnerItems;
public CustomSpinnerAdapter(Context applicationContext, int resource, List<String> spinnerItems) {
super(applicationContext, resource, spinnerItems);
this.spinnerItems = spinnerItems;
inflater = (LayoutInflater.from(applicationContext));
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
view = inflater.inflate(R.layout.custom_spinner_item, null);
TextView type = (TextView) view.findViewById(R.id.spinner_item_text);
type.setText(spinnerItems.get(i));
return view;
}
}
次に、CustomSpinnerAdapterクラスをインスタンス化し、スピナーのアダプターとして設定します。 spinnerListは、スピナーに表示されるアイテムのリストです。
CustomSpinnerAdapter customSpinnerAdapter = new CustomSpinnerAdapter(getContext(), Android.R.layout.simple_spinner_item, spinnerList);
spinner.setAdapter(customSpinnerAdapter);
このレイアウトは完璧に役立ちます。
<FrameLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="@dimen/dp5"
Android:background="@drawable/squre_gray_bg"
Android:paddingRight="@dimen/dp10">
<Spinner
Android:id="@+id/ed_project_start"
Android:layout_width="match_parent"
Android:layout_height="@dimen/dp40"
Android:layout_marginTop="@dimen/dp5"
Android:textColor="@color/colorDarkGray" />
</FrameLayout>