web-dev-qa-db-ja.com

スピナーのテキストが白い背景に白い

私のスピナーのテキストは白で、その理由はわかりません。

enter image description here

これは私のxmlであり、特別なものはありません

 <Spinner
     Android:id="@+id/spinner_date"
     Android:layout_width="0dp"
     Android:layout_height="wrap_content"
     Android:layout_weight="1" />

そして私のコード

dateSpinner = (Spinner) findViewById(R.id.spinner_date);
selectedDate = calendar.getTime();
List<String> list = new ArrayList<String>();
list.add(formatter.format(selectedDate));
dateAdapter = new ArrayAdapter<String>(mContext,
            Android.R.layout.simple_spinner_item, list);
dateSpinner.setAdapter(dateAdapter);

テキストが白で表示される理由は何ですか?

編集:私は理由を見つけました、私は私のonCreateで設定されたmContextパラメータを置き換えました。

mContext = getApplicationContext();

今、私はdを使用します

ateAdapter = new ArrayAdapter<String>(this,
                Android.R.layout.simple_spinner_item, list);

そしてそれは動作します。

33
Robby Smet

私は同じ問題を抱えており、答えを見つけました。アプリケーションコンテキストは使用せず、代わりにgetActivity()(フラグメントにいる場合)またはthis(アクティビティにいる場合)を使用するだけで機能します

 dateAdapter = new ArrayAdapter<String>(**this**,
        Android.R.layout.simple_spinner_item, list);
100
Le Hung

私はこの問題を解決しました

getBaseContext()

の代わりに

getApplicationContext()
14
smukamuka

私はそれを変更します

_new ArrayAdapter<String>(getApplicationContext(), Android.R.layout.simple_spinner_item, some_list);
_

新しいArrayAdapter<String>(this, Android.R.layout.simple_spinner_item, list);

「これ」は使いたくありませんが、修正されています

3
DayDayHappy

また、アプリケーションのテーマが原因で同じ問題が発生しました。私が交換して解決した

Android.R.layout.simple_spinner_item

Android.R.layout.simple_list_item_1

ArrayAdapterで。これで問題が解決することを願っています

2
Shakeeb Ayaz

たぶん、あなたは白いAndroid:textColor="@Android:color/white"属性(プロジェクトのlayoutフォルダー内のsimple_spinner_item.xml)。

適切なAndroid:textColor="@Android:color/COLOR_YOU_WANT_TO_USE"属性。

1
zkminusck

スピナーのスタイルを簡単に設定できます。 style.xmlでこれを使用します:

 <style name="SpinnerThemeLight" >
    <item name="Android:colorBackground">@color/black</item>
    <item name="Android:textColorPrimary">@color/black</item>
    <item name="Android:textColorSecondary">@color/black</item>
    <item name="Android:textColorTertiary">@color/black</item>
    <item name="Android:textColorPrimaryDisableOnly">@color/black</item>
</style>

上記のxmlファイルでは、時間のためにblack色を指定しています。それで遊んで、お好みの色を整理してください。

activity.xmlSpinnerを次のように定義します。

 <Android.support.v7.widget.AppCompatSpinner
   Android:id="@+id/spinner"
   Android:layout_width="wrap_content"
   Android:layout_height="match_parent"
   Android:entries="@array/countrys"
   Android:spinnerMode="dropdown"
   Android:theme="@style/SpinnerThemeLight"/>
1
Febin Mathew

新しいレイアウトを作成せずに、スピナーのテキストビューのテキストの色を変更しました。私はそれが長い時間だったことを知っていますが、それは私のために働いたものです、ちょうどそれを共有することを考えました。最良の部分は、デフォルトのアダプターで使用できることです。

コードは次のとおりです(アクティビティの場合はこれ、フラグメントの場合はrequireActivity)

1)Java

arrayAdapter = new ArrayAdapter<String>(this,Android.R.layout.simple_list_item_1,groups){
        @NonNull
        @Override
        public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
            View view = super.getView(position, convertView, parent);
            TextView listItem = view.findViewById(Android.R.id.text1);
            listItem.setTextColor(Color.WHITE);
            listItem.setTextSize(20);
            listItem.setElevation(18);
            return view;
        }
    };

2)コトリン

arrayAdapter = object : ArrayAdapter<String>(requireActivity(), Android.R.layout.simple_spinner_item, spinnerCategoriesList) {
        override fun getView(position: Int, @Nullable convertView: View?, parent: ViewGroup): View {
            val view = super.getView(position, convertView, parent)
            val listItem = view.findViewById<TextView>(Android.R.id.text1)
            listItem.setTextColor(Color.BLACK)
            listItem.textSize = 16f
            return view
        }
    }
1
Supradip.M

Spinner用に独自のTextViewを作成したと仮定します。

<TextView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:textSize="14sp"
    Android:textColor="@color/white"
    Android:padding="5dip"
    />

そのような呼び出しを介してアダプタに接着しました

String[] spinnerItems = getResources().getStringArray(R.array.my_array);
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.spinner_text, spinnerItems);

これにより、ドロップダウンビュー内のアイテムを含むスピナーの選択テキストが白く塗られます。これで、ドロップダウンビューの背景はアプリのテーマの影響を受け、ほとんどの場合、白いテキストが白い背景にレンダリングされます。これを避けるには、Androidを使用すると、スピナードロップダウンビューのリソースを設定できます。独自のビューを設定するか、ドロップダウン内のカスタムテキストビューを上書きするデフォルトのドロップダウンビューを使用できます。通話中のメニュー

 adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);

完全なコードは次のようになります

this.spinner = findViewById(R.id.spinnerView);
String[] spinnerItems = getResources().getStringArray(R.array.my_array);
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.spinner_text, spinnerItems);
adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
this.spinner.setAdapter(adapter);
0
Martin Nowosad