web-dev-qa-db-ja.com

Androidスピナーでテキストの色を設定する

Android(APIレベル16以上を対象)でスピナーに表示される選択したアイテムの色を変更したい。SOに投稿されたいくつかのソリューションを試しました。私のスピナーアイテムとカスタムレイアウトのテキストカラープロパティとしてColorStateListを使用していますが、役に立ちません。スピナーは半透明の背景に表示されます。したがって、アイテムのカスタムレイアウトは、色を追加するため機能しません。スピナー。現在、私のハックソリューションは

if (_colorCodeSpinner.getSelectedView() != null) {
    ((TextView) _colorCodeSpinner.getSelectedView()).setTextColor(0xFFFFFFFF);
}

ただし、これは、選択したビューがnullでない場合(向きが変更されている場合)にのみ機能します。

テキストの色を設定する簡単な解決策がないなんて信じられません。それはあなたがよくすることのようです。矢印の色を変えるのと同じです。

_colorCodeSpinner.getBackground().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP);

私は何かが足りないのですか?スピナーの色を変更するための推奨される方法は何ですか?

Android spinner

画像のように、スピナーに表示されている選択項目の文字の色は黒ですが、白に変更したいと思います。

[〜#〜]編集[〜#〜]

明確にするために:私は実行時に値をオーバーライドするいくつかの小さなコードを探していません(この質問で投稿した2つのスニペットのように)。これを適切に行うための実際の方法を探しています(XMLレイアウトやテーマなど)。テキストの色のプロパティを一度設定して、毎回更新する必要がないようにします。アイテムを一つ選べ。

6
Daniel

これを行う :

  spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
      @Override
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
          ((TextView) parent.getChildAt(0)).setTextColor(Color.WHITE); /* if you want your item to be white */
      }

      @Override
      public void onNothingSelected(AdapterView<?> parent) {
      }
  });
6
Hugo Houyez

arrayAdapterを次のように宣言し、スピナーに設定します。

ArrayAdapter<String> adapter_state = new ArrayAdapter<String>(this,
                            R.layout.simple_spinner_dropdown_item, your_strings);
adapter_state.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
_colorCodeSpinner.setAdapter(adapter_state);

およびレイアウトxmlファイルsimple_spinner_dropdown_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:textSize="20sp"
    Android:gravity="left"
    Android:textColor="#AAA"
    Android:padding="5dp"
    />

私のためのこの仕事

2
Axbor Axrorov

これはあなたのために働きます

public void onItemSelected(AdapterView<?> parent, View arg1, int arg2,
        long arg3) {
    // TODO Auto-generated method stub

    item = (String) parent.getItemAtPosition(arg2);
   ((TextView) parent.getChildAt(0)).setTextColor(0x00000000);



    }

[〜#〜]または[〜#〜]
セレクターを使用して色を変更できます

my_selctor.xmlという名前のxmlを1つ作成します

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
     <item Android:state_pressed="true"
           Android:color="black" /> <!-- pressed -->
     <item Android:state_focused="true"
           Android:color="black" /> <!-- focused -->
     <item Android:color="white" /> <!-- default -->
 </selector>

テキストビューでこのように設定します

<TextView ...........
   Android:textColor=""@drawable/my_selctor"/>
2

この編集styles.xmlレイアウトファイルを実現できます。この回答では、Android Studioで、minSdkVersion16とAppCompatSpinnerを使用して新しいプロジェクトを使用します。

styles.xmlレイアウト:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="Android:spinnerItemStyle">@style/mySpinnerItemSelectedStyle</item>
</style>

<style name="mySpinnerItemSelectedStyle" parent="@Android:style/Widget.Holo.TextView.SpinnerItem">
    <item name="Android:textColor">@color/spinnerTextColor</item>
</style>

そして、colors.xmlファイルにこれを追加します。

<color name="spinnerTextColor">#ffffff</color>

解決策は、以下のリンクから取得されました。カラースピナーのドロップダウンアイテムに使用されますが、ほとんど同じアプローチです。

https://stackoverflow.com/a/22207394/6514926

1
NetrunnerX

次のコードを試してください:-

XML:-

   <Spinner
        Android:id="@+id/spinner"
        Android:layout_width="match_parent"
        Android:layout_margin="20dp"
        Android:popupBackground="#ffffff"
        Android:layout_height="match_parent">

    </Spinner>

textview用に別のxmlを作成します

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:text="dshsgv"
Android:padding="5dp"
Android:textColor="#000000">

</TextView>

その後、あなたの活動で:-

public class MainActivity extends AppCompatActivity {
Spinner spinner;
String[] cat = {"Automobile", "Automobile"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    spinner = (Spinner) findViewById(R.id.spinner);
    ArrayAdapter<String> adpter = new ArrayAdapter<String>     (MainActivity.this, R.layout.text, cat);
    spinner.setAdapter(adpter);
 }
 }
1
Pawanpreet

これに従ってください リンク

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(12);

    }

    public void onNothingSelected(AdapterView<?> parent) {

    }
};
0

このように使用できます。これにより、DropDownメニューのアイコンが変更されます。

spinner.getBackground().setColorFilter(Color.parseColor("#FFFFFF"), PorterDuff.Mode.SRC_ATOP);

次に、次のようにspinner_text.xmlで1つのTextViewレイアウト名を作成します

<CheckedTextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/spinnerText"
style="?android:attr/spinnerDropDownItemStyle"
Android:layout_width="match_parent"
Android:layout_height="?android:attr/listPreferredItemHeight"
Android:ellipsize="Marquee"
Android:textColor="#fff" />

このコードをMainActivity.Javaクラスに次のように記述します

 List<String> categories = new ArrayList<String>();
    categories.add("Automobile");
    categories.add("Business Services");
    categories.add("Computers");
    categories.add("Education");
    categories.add("Personal");
    categories.add("Travel");

    ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.spinner_text, categories);
    spinner.setAdapter(adapter);
    spinner.getBackground().setColorFilter(ContextCompat.getColor(this,R.color.white), PorterDuff.Mode.SRC_ATOP);
    // attaching data adapter to spinner
    spinner.setAdapter(adapter); 
0
AMAN SINGH