res/values/arrays.xml
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <string-array name="spinner_values">
- <item>Cupcake</item>
- <item>Donut</item>
- <item>Eclair</item>
- <item>Froyo</item>
- <item>Gingerbread</item>
- <item>Honeycomb</item>
- <item>ICS</item>
- <item>JellyBean</item>
- <item>KitKat</item>
- </string-array>
- </resources>
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <Spinner
- android:id="@+id/spinner1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:entries="@array/spinner_values" />
- </LinearLayout>
このように選択肢をセットした場合、Spinner部分のレイアウトには android.R.layout.simple_spinner_item が、ドロップダウンのレイアウトには android.R.layout.simple_spinner_dropdown_item が使われます。
AbsSpinner.java
- 67 public AbsSpinner(Context context, AttributeSet attrs, int defStyle) {
- 68 super(context, attrs, defStyle);
- 69 initAbsSpinner();
- 70
- 71 TypedArray a = context.obtainStyledAttributes(attrs,
- 72 com.android.internal.R.styleable.AbsSpinner, defStyle, 0);
- 73
- 74 CharSequence[] entries = a.getTextArray(R.styleable.AbsSpinner_entries);
- 75 if (entries != null) {
- 76 ArrayAdapter<charsequence> adapter =
- 77 new ArrayAdapter<charsequence>(context,
- 78 R.layout.simple_spinner_item, entries);
- 79 adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
- 80 setAdapter(adapter);
- 81 }
- 82
- 83 a.recycle();
- 84 }
- </charsequence></charsequence>
android.R.layout.simple_spinner_item
- <?xml version="1.0" encoding="utf-8"?>
- ...
- <TextView xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@android:id/text1"
- style="?android:attr/spinnerItemStyle"
- android:singleLine="true"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:ellipsize="marquee"
- android:textAlignment="inherit"/>
android.R.layout.simple_spinner_dropdown_item
- <?xml version="1.0" encoding="utf-8"?>
- ...
- <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@android:id/text1"
- style="?android:attr/spinnerDropDownItemStyle"
- android:singleLine="true"
- android:layout_width="match_parent"
- android:layout_height="?android:attr/dropdownListPreferredItemHeight"
- android:ellipsize="marquee"
- android:textAlignment="inherit"/>
この属性に独自のスタイルをセットすれば、Spinner部分とドロップダウンの文字サイズや文字色を一括で変えることができます。
文字サイズを小さくする例
res/values/styles.xml
- <resources>
- <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
- <item name="android:spinnerItemStyle">@style/SpinnerItemStyle</item>
- <item name="android:spinnerDropDownItemStyle">@style/SpinnerDropDownItemStyle</item>
- </style>
- <style name="SpinnerItemStyle" parent="android:Widget.Holo.Light.TextView.SpinnerItem">
- <item name="android:textSize">12sp</item>
- </style>
- <style name="SpinnerDropDownItemStyle" parent="android:Widget.Holo.Light.DropDownItem">
- <item name="android:textSize">12sp</item>
- </style>
- </resources>
この方法のときも、setOnItemSelectedListener()を使って選択項目が変わったことを検知でき、Adapterが保持しているObjectはStringになります。
- public class MainActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Spinner spinner = (Spinner) findViewById(R.id.spinner1);
- spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> adapter,
- View v, int position, long id) {
- Toast.makeText(MainActivity.this,
- (String) adapter.getItemAtPosition(position),
- Toast.LENGTH_SHORT).show();
- }
- @Override
- public void onNothingSelected(AdapterView<?> adapter) {
- }
- });
- }
- }
0 件のコメント:
コメントを投稿