Android 1.6 では、スピナー (ドロップダウン メニュー) をタップすると、スピナー オプションの横にラジオ ボタンが表示されます。オプション テキストだけが残るように、これらのラジオ ボタンを削除するにはどうすればよいですか?
7 に答える
ラジオ ボタンを削除するためだけに、独自のアダプター クラスは必要ありません。
レイアウトに dropdown_item.xml を作成する
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
android:singleLine="true"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:ellipsize="marquee" />
次に、コードで次の呼び出しを行います。
arrayAdapter.setDropDownViewResource(R.layout.dropdown_item);
デフォルトのスピナー ドロップダウン アイテムは、ラジオ ボタンを持つ CheckedTextView です。ここでは、TextView に置き換えます。
Androidレイアウトを使用できます
android.R.layout.simple_spinner_item
それ以外の
android.R.layout.simple_spinner_dropdown_item
しかし、 @ kimkunjjの回答をお勧めします。レイアウトを制御できます。
スピナー リストのラジオ ボタンを取り除きたい場合は、行に独自のレイアウトを提供する必要があります。
以下の例を見てください。
package com.ramps;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
public class MySpinner extends Activity {
//data that will be used as a spinner options
private static String data[] = {"one", "two", "three"};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//main.xml file contains spinner
setContentView(R.layout.main);
Spinner spinner = (Spinner) findViewById(R.id.spinner);
//create your own adapter
MySpinnerAdapter adapter = new MySpinnerAdapter(this,R.layout.custom_spinner_row,R.id.text, data );
//set your custom adapter
spinner.setAdapter( adapter );
}
private class MySpinnerAdapter extends ArrayAdapter{
public MySpinnerAdapter(Context context, int resource,
int textViewResourceId, String[] objects) {
super(context, resource, textViewResourceId, objects);
}
}
}
スピナー行のカスタム レイアウトは、id が "text" (android:id="@+id/text") である 1 つの TextView 要素を持つ単純な LinearLayout です
。これは単純な例です。TextView だけでなく、より洗練されたレイアウトが必要な場合は、おそらく MySpinnerAdapter の getView() メソッドをオーバーライドする必要があります。
「android.R.layout.simple_spinner_item」がその役割を果たします。
プログラム的には:
modeSpinner=new Spinner(layout.getContext());
ArrayAdapter<String> arrayAdapter=new ArrayAdapter<String>(layout.getContext(),
android.R.layout.simple_spinner_item, Arrays.asList(modes));
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
使用するsimple_dropdown_item_1line
Android サポート ライブラリ バージョン 18 以降をプロジェクトに含めている場合は、リソース IDsimple_spinner_dropdown_item
をsupport_simple_spinner_dropdown_item
. これにより、ラジオボタンが削除されます。
これを行う「最もクリーンな」方法 (チェック マークを外し、テキスト スタイル、項目サイズなどを含む他のものには何も触れないでください) は、カスタム アダプターを作成することです (上記の回答のように):
public class SimpleSpinnerArrayAdapter extends ArrayAdapter<String> {
public SimpleSpinnerArrayAdapter(Context context, String[] data) {
super(context, android.R.layout.simple_spinner_item, data);
this.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
}
public SimpleSpinnerArrayAdapter(Context context, List<String> data) {
super(context, android.R.layout.simple_spinner_item, data);
this.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
}
/**
* Returns default dropdown view with removed checkbox
*/
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View view = super.getDropDownView(position, convertView, parent);
if (view != null && view instanceof CheckedTextView) {
((CheckedTextView) view).setCheckMarkDrawable(null);
}
return view;
}
}
getDropDownView()
ドロップダウン リスト項目のビューを返すメソッドに注意してください。ここでは任意のカスタム ビューを使用できますが、デフォルト ビューに固執する場合は、おそらく上記のコードを使用する必要があります。