色を選ぶためのスピナーを作ってみます。スピナーヘッダーに色が表示されます。これがスクリーンショットです:
しかし、ご覧のとおり、9パッチのスピナーの背景(ヘッダー)は色で塗りつぶされていません。9パッチの背景は次のとおりです。
しかし、理由がわかりません...
カスタムArrayAdapterを実装しました。コードは次のとおりです。
spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<String> adapter = new MyArrayAdapter(this, R.layout.spinner_row, R.id.textView1, items);
spinner.setAdapter(adapter);
private class MyArrayAdapter extends ArrayAdapter<String>{
public MyArrayAdapter(Context context, int resource, int textViewResourceId, String[] objects) {
super(context, resource, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return getCustomViewSmall(position, convertView, parent);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
return getCustomView(position, convertView, parent);
}
public View getCustomView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View row = inflater.inflate(R.layout.spinner_row, parent, false);
View v = (View) row.findViewById(R.id.spinnerFrame);
v.setBackgroundColor(getColor(position));
return row;
}
public View getCustomViewSmall(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View row = inflater.inflate(R.layout.spinner_row_small, parent, false);
row.setBackgroundColor(getColor(position));
return row;
}
private int getColor(int pos) {
switch(pos) {
case 0:
return colors[0]; // Blue
case 1:
return colors[1]; // Purple
case 2:
return colors[2]; // Orange
case 3:
return colors[3]; // Yellow
case 4:
return colors[4]; // Cyan
}
return colors[5];
}
}
そして、レイアウトのコードは次
のとおりです。spinner_row_small.xml(ヘッダーのレイアウト):
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/spinnerFrameSmall"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</FrameLayout>
spinner_row.xml(行のレイアウト):
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/FrameLayout1"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_gravity="center"
android:background="@color/white" >
<FrameLayout
android:id="@+id/spinnerFrame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_marginBottom="1dp"
android:layout_marginTop="1dp" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
</FrameLayout>
</FrameLayout>
そしてmain.xml:
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/textview"
android:spinnerMode="dropdown"
android:popupBackground="@drawable/spinner_background"
android:layout_marginBottom="30dp" />
誰かが私を助けてくれたらとても嬉しいです。
よろしくお願いします!