0

スピナーを入れたのですがAlertDialog、どういうわけか色が通常とは違って表示されます。それは私にこの問題をもたらします:

アンドロイドスピナー

そのスピナーを通常のアクティビティで使用している場合、テキストの色は黒で、ドロップダウンリストの背景色は灰色です。これは反対で、ドロップダウンリストの背景色は黒で、テキストの色は白です。それも問題ありませんが、問題は、その画像でわかるように、その白いテキストがその灰色の背景にほとんど見えないことです。

新しいTextViewを定義して新しいアダプタを適用しようとしましたが、ドロップダウンリストの色にのみ影響します。アイテムを選択した後も、テキストは白のままです。

spinner_text.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="wrap_content"
  android:gravity="left"  
  android:textColor="@android:color/black"        
/>

アダプタ

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_text, values);
spinner.setAdapter(adapter);

私が欲しいのは、アクティビティで使用されるレイアウトにスピナーを配置した場合と同じように見えることです。

4

2 に答える 2

2

これは、アプリケーションのテーマを設定したためです。カスタムアダプタクラスを実装し、このためにSpinnerAdapterを実装する必要があります。

これがこの例です

public class CusSpinnerAdapter extends ArrayAdapter<String> 
    implements SpinnerAdapter{
    private LayoutInflater inflate;
    private int resourceId;
    private String[] options;
    private int selIndex;
    private Context context;

    public CusSpinnerAdapter(Context context, int textViewResourceId,
            String[] objects) {
        super(context, textViewResourceId, objects);
        this.context = context;
        this.inflate = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.resourceId = textViewResourceId;
        this.options = objects;
    }
    public void setSelectedIndex(int selIndex){
        this.selIndex = selIndex;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView==null){
            convertView = inflate.inflate(resourceId, null);
            Holder holder = new Holder();
            holder.textView = (TextView)convertView.findViewById(R.id.spinner_item);
            convertView.setTag(holder);
        }
        Holder holder = (Holder)convertView.getTag();
        holder.textView.setText(options[position]);

        return convertView;
    }
    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        if(convertView==null){
            convertView = inflate.inflate(resourceId, null);
            Holder holder = new Holder();
            holder.textView = (TextView)convertView.findViewById(R.id.spinner_item);
            convertView.setTag(holder);
        }
        Holder holder = (Holder)convertView.getTag();
        holder.textView.setText(options[position]);
        if(position==selIndex){
            holder.textView.setBackgroundColor(context.getResources().getColor(R.color.spinner_item_selected));
        }else
            holder.textView.setBackgroundColor(context.getResources().getColor(R.color.spinner_item_default));

        return convertView;
    }
    private class Holder{
        TextView textView;
    }
}

このselIndexではインデックスアイテムが選択されました。どのアイテムが選択されたかを識別し、アイテムに選択されたドローアブルを設定するときに、これを実装する必要があります。スピナーコントロールで選択されたアイテムに実装し、そこからこのアダプタークラスのインデックス値を設定するだけです。

これもまた別の方法です

https://stackoverflow.com/a/4662939/760489

于 2013-02-16T10:42:53.293 に答える