web-dev-qa-db-ja.com

スピナーのフォントの色を変更するには?

Droid Xの電話で、スピナーでフォントの色が白になり、ユーザーがアイテムをハイライトしない限りフォントの色が見えなくなるという問題が発生しています。他の電話にはこの問題はないようです。フォントを強制的に黒くして、効果があるかどうかを確認しようとしました。どうやってやるの?

これが、現在スピナーに入力している方法です。 simple_spinner_itemがDroid Xで壊れています。

String spin_arry[] = new String[str_vec.size()];
str_vec.copyInto(spin_arry);
ArrayAdapter adapter =
    new ArrayAdapter(this,Android.R.layout.simple_spinner_item, spin_arry);
22
JonF

次のコード例では、Android SDKのSpinnerプロジェクトサンプルを使用します。


コード

まず、ドロップダウンリストでのビューの作成をインターセプトするカスタムアダプターを作成する必要があります。

static class CustomArrayAdapter<T> extends ArrayAdapter<T>
{
    public CustomArrayAdapter(Context ctx, T [] objects)
    {
        super(ctx, Android.R.layout.simple_spinner_item, objects);
    }

    //other constructors

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent)
    {
        View view = super.getView(position, convertView, parent);

        //we know that simple_spinner_item has Android.R.id.text1 TextView:         

        /* if(isDroidX) {*/
            TextView text = (TextView)view.findViewById(Android.R.id.text1);
            text.setTextColor(Color.RED);//choose your color :)         
        /*}*/

        return view;

    }
}

次に、次のようにコードでアダプターを作成します。

 String [] spin_arry = getResources().getStringArray(R.array.Planets);        
 this.mAdapter = new CustomArrayAdapter<CharSequence>(this, spin_arry);

説明:

CustomArrayAdapterはAndroidの組み込みレイアウトリソースを使用していることを認識しているため、テキストがTextViewにID Android.R.id.text1で配置されることも認識しています。そのため、ドロップダウンリストでのビューの作成をインターセプトし、テキストの色を必要な色に変更できます。


スクリーンショット:

enter image description here

46
inazaruk

シンプルでクリスプ...

private OnItemSelectedListener OnCatSpinnerCL = new AdapterView.OnItemSelectedListener() {
  public void onItemSelected(AdapterView<?> parent, View view, int pos,
        long id) {
    ((TextView) parent.getChildAt(0)).setTextColor(Color.BLUE);
    ((TextView) parent.getChildAt(0)).setTextSize(5);
  }

  public void onNothingSelected(AdapterView<?> parent) {
  }
};
7
Ashraf

R.layout.simplespinneritem:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android" 
    Android:id="@Android:id/text1"
    Android:singleLine="true"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content" />

IDはAndroid:id="@Android:id/text1"、フォントと背景の色を設定します。

ArrayAdapter adapter =
  new ArrayAdapter(this,packagename.R.layout.simple_spinner_item, spin_arry);
7
Bhaskar
public class ee extends Activity{
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ww);
addListenerOnSpinnerItemSelection();

}
public void addListenerOnSpinnerItemSelection(){

    ArrayList<String> array = new ArrayList<String>();
    array.add("item0");
    Spinner spinner1;
    ArrayAdapter<String> mAdapter;
    spinner1= (Spinner) findViewById(R.id.spinner2);
    spinner1= new ArrayAdapter<String>(this, R.layout.spinner_item, array);
    spinner1.setAdapter(mAdapter);

}  
}

そしてxml res/layoutに新しいxmlファイルを追加します:タイプレイアウト、スピナー

(spinner_item.xml内)

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:gravity="top"
    Android:singleLine="true"
    Android:textColor="#00f0ff" />
3
noobProgrammer

Sasadの返信に追加するには、そのファイルのコピーを作成します。これは、プロジェクトのAndroidフォルダにあります)、そのファイルのTextViewのテキストの色を変更し、そのレイアウトを使用しますAndroidの代わりにアダプタを初期化しているとき。

2
Kumar Bibek

2つの新しいレイアウトリソースファイルを追加するこのアプローチも試すことができます。

  1. Custom_spinner_list_item
  2. Custom_spinner_dropdown_item

コードでそれらを使用します。

String spin_arry[] = new String[str_vec.size()];
str_vec.copyInto(spin_arry);
ArrayAdapter adapter =
    new ArrayAdapter(this,R.layout.custom_simple_spinner_item, spin_arry);
adapter.setDropDownViewResource(R.layout.custom_spinner_dropdown_item);

custom_spinner_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/text1"
    style="?attr/spinnerDropDownItemStyle"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:ellipsize="Marquee"
    Android:fontFamily="@font/roman"
    Android:singleLine="true"
    Android:textAlignment="inherit"
    Android:textColor="@color/black"
    Android:textSize="14sp">

</TextView>

custom_spinner_dropdown_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/text1"
    style="?attr/spinnerDropDownItemStyle"
    Android:layout_width="match_parent"
    Android:layout_height="?attr/dropdownListPreferredItemHeight"
    Android:ellipsize="Marquee"
    Android:fontFamily="@font/roman"
    Android:singleLine="true"
    Android:textAlignment="textStart"
    Android:textColor="@color/black"
    Android:textSize="14sp">

</TextView>

ハッピーコーディング!! :)

0
Haresh Raman