wake-up-neo.net

Textfarbe des ausgewählten Elements im Drehfeld ändern

Wie kann ich die Schriftfarbe des ausgewählten Elements in einem Spinner ändern?

Ich kann die Hintergrundfarbe des ausgewählten Elements, die Farbe des Dropdown-Elements usw. ändern, nicht jedoch die Textfarbe des ausgewählten Elements. Wie kann ich das tun?

mein Code lautet: Dies ist ein Spinner, den ich benutze--:

<Spinner
                Android:id="@+id/spinner1"
                Android:layout_width="wrap_content"
                Android:layout_height="32dip"
                Android:background="@drawable/mybg"
                Android:divider="@drawable/list_divider"
                Android:drawSelectorOnTop="true"
                Android:popupBackground="#D3D5D3"
                Android:Prompt="@string/activityy_Prompt" 
                />

das ist mybg.xml

<!-- <item Android:drawable="@drawable/blue" Android:state_pressed="false"/> -->
<!-- <item Android:drawable="@drawable/back11"/> -->

<item Android:drawable="@drawable/greenyellow1" Android:state_focused="true" Android:state_pressed="false"/>
<item Android:drawable="@drawable/greenyellow1" Android:state_focused="true" Android:state_pressed="true"/>
<item Android:drawable="@drawable/greenyellow1" Android:state_focused="false" Android:state_pressed="true"/>
<item Android:drawable="@drawable/greenyellow1" Android:state_selected="true"/>
<item Android:drawable="@drawable/back11"/>

mit diesen kann ich die Textfarbe des ausgewählten Elements nicht ändern ...

26
amitkumar12788

zeichnend/mybg:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_activated="true">
        <color Android:color="@color/black" />
    </item>
</layer-list>

Dadurch wird die Farbe des ausgewählten Elements im Popup geändert.

14
Sudheesh B Nair

Definiere OnItemSelectedListener so: 

  private AdapterView.OnItemSelectedListener listener = new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            ((TextView) parent.getChildAt(0)).setTextColor(0x00000000);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    };

und dann OnItemSelectedListener wie folgt auf spinner setzen:

spinner.setOnItemSelectedListener(listener);
49
Priya

versuchen Sie, onItemSelected in Ihrem OnItemSelectedListener zu implementieren, um die Textfarbe des ausgewählten Spinner-Elements zu ändern

public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
    int index = adapterView.getSelectedItemPosition();
    ((TextView) spinner.getSelectedView()).setTextColor(getResources().getColor(R.color.Blue)); //<----
14
Er Swati Mittal

verwenden des Selektors als Textfarbe.

erstellen Sie color_selector.xml in drawable like 

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

und in der Textansicht 

<TextView 
   Android:textColor="@drawable/color_selector"/>

Sie können die ausgewählte Textfarbe ändern, indem Sie OnItemSelectedListener zur spinner hinzufügen.

qtySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        ((TextView) view).setTextColor(Color.BLACK); //Change selected text color
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }
});
7
Jegan

verwenden Sie einfach diese Zeile onItemSelected Listner -

public void onItemSelected(AdapterView<?> parent, View arg1, int arg2,long arg3) 
     {

       item = (String) parent.getItemAtPosition(arg2);


       ((TextView) parent.getChildAt(0)).setTextColor(0x00000000);

 }
4
Yamini

Ich weiß, dass dies eine alte Frage ist, aber ich hatte große Probleme beim Ändern der Farbe des ausgewählten Elements in TabLayout und dies hat wirklich für mich funktioniert:

spinner.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                ((TextView) spinner.getSelectedView()).setTextColor(Color.WHITE); //change to your color
            }
        });
2

Das Setzen von ((TextView) view).setTextColor(getResources().getColor(R.color.black)); in der onItemSelected(...) listener-Methode wird funktionieren.

2
Kavita_p

Sie benötigen keinen Java-Code für die Hintergrundfarbänderung in Android 2.3v. Fügen Sie einfach Android:background="#F0F8FF" zu Ihrem Spinner in der XML-Datei hinzu.

0
JyothiKanth

Wenn Ihr Spinner einen ArrayAdapter verwendet, können Sie einfach ein benutzerdefiniertes Layout für Ihre Spinnerelemente übergeben. Dieses Layout kann eine einfache Textansicht sein, jedoch mit dem Attribut Android: textColor.

MainActivity.Java onCreate ()

adapter = new ArrayAdapter<>(this, R.layout.spinner_custom_textcolor, data);
spinner.setAdapter(adapter);

spinner_custom_textcolor.xml  

<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
style="?android:attr/spinnerItemStyle" 
Android:textColor="@color/YOUR_COLOR_HERE"
Android:singleLine="true"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:ellipsize="Marquee"
Android:textAlignment="inherit"/>

* Alles aus dem obigen Layout außer für Android: textColor ist eine direkte Kopie von Android.R.layout.simple_spinner_item

0
Carvell Wakeman
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
      @Override
      public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
           ((TextView) adapterView.getChildAt(0)).setTextColor(Color.WHITE);
}
0
Pablo Cegarra

Die Lösung, die für mich funktionierte, bestand darin, eine CheckedTextView für die Dropdown-Ressourcensicht zu verwenden und dann die Farbe des markierten Elements mithilfe einer Farbauswahl zu ändern.

spinner_dropdown_item.xml im layout-Ordner:

<?xml version="1.0" encoding="utf-8"?>

<!-- A `CheckedTextView` allows the color of the text to be changed when it is selected (checked). -->
<CheckedTextView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/spinner_item_textview"
    Android:layout_height="wrap_content"
    Android:layout_width="match_parent"
    Android:maxLines="1"
    Android:ellipsize="end"
    Android:paddingStart="20dp"
    Android:paddingEnd="20dp"
    Android:paddingTop="8dp"
    Android:paddingBottom="8dp"
    Android:textSize="18sp"
    Android:textColor="@color/spinner_color_selector"
    Android:background="@color/spinner_background" />

spinner_color_selector im color-Ordner:

<?xml version="1.0" encoding="utf-8"?>

<!-- Highlight the selected (checked) item when the spinner is open. -->
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <item Android:state_checked="true" Android:color="@color/white" />
    <item Android:color="@color/blue_100" />
</selector>

spinner_dropdown_item.xml muss als DropDownResourceView für die Adapter eingestellt sein. In meinem Fall verwende ich eine ResourceArrayAdapter, die Informationen aus mehreren Quellen bezieht.

// Setup a `MatrixCursor` for the static entries.
String[] matrixCursorColumnNames = {DatabaseHelper._ID, DatabaseHelper.NAME};
MatrixCursor matrixCursor = new MatrixCursor(matrixCursorColumnNames);
matrixCursor.addRow(new Object[]{-2, getString(R.string.first_spinner_item)});
matrixCursor.addRow(new Object[]{-1, getString(R.string.second_spinner_item)});

// Get a `Cursor` with the list of additional items from the database.
Cursor cursor = DatabaseHelper.getCursor();

// Combine `matrixCursor` and `cursor`.
MergeCursor mergeCursor = new MergeCursor(new Cursor[]{matrixCursor, foldersCursor});

// Create a `ResourceCursorAdapter` for the spinner with `this` context.  `0` specifies no flags.;
ResourceCursorAdapter resourceCursorAdapter = new ResourceCursorAdapter(this, R.layout.spinner_item, mergeCursor, 0) {
    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        // Get a handle for the spinner item `TextView`.
        TextView spinnerItemTextView = (TextView) view.findViewById(R.id.spinner_item_textview);

        // Set the `TextView` to display the name.
        spinnerItemTextView.setText(cursor.getString(cursor.getColumnIndex(DatabaseHelper.NAME)));
    }
};

// Set the `ResourceCursorAdapter` drop drown view resource.
resourceCursorAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item);

// Get a handle for the `Spinner`.
Spinner spinner = (Spinner) findViewById(R.id.spinner);

// Set the adapter for the folder `Spinner`.
spinner.setAdapter(resourceCursorAdapter);

Da ResourceCursorAdapter die gleiche bindView verwendet, um den Spinner zu füllen, wenn er geöffnet und geschlossen ist, muss die ID der TextView in spinner_dropdown_item.xml und spinner_item.xml identisch sein.

spinner_item.xml im layout-Ordner:

<?xml version="1.0" encoding="utf-8"?>

<TextView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/spinner_item_textview"
    Android:layout_height="wrap_content"
    Android:layout_width="match_parent"
    Android:maxLines="1"
    Android:ellipsize="end"
    Android:paddingStart="10dp"
    Android:paddingEnd="10dp"
    Android:textSize="18sp"
    Android:textColor="@color/primaryTextColor" />
0
Soren Stoutner

einige von Ihnen verwenden MaterialBetterSpinner und binden Ihre Layouts All das oben genannte hilft nicht, probiere es aus, hoffe es hilft dir:

public class MyAdapter extends ArrayAdapter<String> {      

        public MyAdapter(Context context, int textViewResourceId, List<String> objects) {
            super(context, textViewResourceId, objects);           

        }

        @Override
        public View getDropDownView(int position, View convertView, ViewGroup parent) {
            return getCustomView(position, convertView, parent);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            return getCustomView(position, convertView, parent);
        }

        public View getCustomView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            final YourXMLBinding rowBinding = DataBindingUtil.inflate(inflater, R.layout.yourXML, parent,false);
            rowBinding.tv1.setText(mMy.getValues().get(position));
            if(position == mMy.getCurrentIndex()) {
                rowBinding.tv1.setTypeface(Typer.set(getContext()).getFont(Font.ROBOTO_BOLD));//change font
                rowBinding.tv1.setTextColor(ContextCompat.getColor(getContext(), R.color.yourColor));//change color
            }
            return rowBinding.getRoot();
        }
    }

yourXML ist ungefähr so:

<?xml version="1.0" encoding="utf-8"?>
<layout>

    <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:orientation="horizontal"
        Android:background="@color/colorBackgroundStart">
        <TextView
            Android:id="@+id/tv1"
            Android:layout_width="0dp"
            Android:layout_weight="0.7"
            Android:layout_height="30dp"
            Android:textColor="#fff"
            Android:textSize="16dp"
            Android:layout_marginTop="8dp"
            Android:layout_marginBottom="10dp"
            Android:layout_marginLeft="8dp"/>

</layout>

erstellen Sie einen Spinner mit diesem Adapter und Ihrem XML: 

final MyAdapter adapter = new MyAdapter(getContext(), R.layout.yourXML, s.getValues());

final MaterialBetterSpinner spinner = new MaterialBetterSpinner(getContext());
spinner.setAdapter(adapter);
0
batsheva

Siehe meine Antwort auf eine ähnliche Frage hier . Meine Antwort ist der von Priya ähnlich, mit der Ausnahme, dass die Textfarbe des ausgewählten Elements korrekt festgelegt wird. Es gibt also keine Verzögerung mit der falschen Farbe, wenn gewartet wird, dass der Spinner automatisch das Standardelement auswählt. Dies geschieht, nachdem die Benutzeroberfläche bereits aktiviert ist. Bildschirm).

0
Rock Lee