2013-03-13 6 views
16

Как изменить цвет шрифта выбранного элемента в прядильщике?Изменить цвет текста выбранного элемента в spinner

Я могу изменить цвет фона выбранного элемента, цвет выпадающего элемента и т. Д., Но не цвет текста выбранного элемента ... как я могу это сделать?

мой код: это кок я using--:

<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" 
       /> 

это 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"/> 

с помощью этих я не удалось изменить цвет текста элемента selecetd ...

+0

используйте эту ссылку, это поможет http://stackoverflow.com/questions/7584158/setting-background-color-for-spinner-item-on-selection – user1283633

+0

напишите нам код, который вы пробовали.Нет монеты Нет Вызвать – Nezam

+0

@ user1283633 Я следую этой ссылке и могу изменить цвет фона только .... не в состоянии изменить цвет текста ... – amitkumar12788

ответ

9
<item android:state_activated="true" android:color="@color/red"/> 

Это изменит выбранный элемент цвет в всплывающем окне.

+5

это делает мое приложение аварийным. – splinter123

+1

изменить андроид: drawable = "@ color/red" – umerk44

+0

Это не работает для выбранного (выпадающего) элемента –

8

используя селектор как текст цвет.

создать color_selector.xml в Drawable как

<?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> 

и в TextView

<TextView ........... 
    android:textColor=""@drawable/color_selector"/> 
+0

thx ... этот код работает только для изменения цветности выбранного элемента ..... – amitkumar12788

+0

weird , здесь ничего не связано с фоном, все, что вам нужно сделать, это использовать android: textColor = "" @ drawable/color_selector ", в котором содержится текст (spinner/textView). –

+0

есть свойство textcolor для spinner? – amitkumar12788

39

просто использовать эту строку кода в вашем itemselected

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

} 
+0

Thx ... его работа .. раньше он не работал, но теперь его работа может быть связана с тем, что я добавляю несколько строк в файл манифеста, например .... android: configChanges = "orientation | keyboardHidden | screenLayout | screenSize" – amitkumar12788

+0

Я новый здесь .. принять, что делать ?? – amitkumar12788

+0

просто нажмите на отметку. – Priya

8

попробовать реализовать onItemSelected в вашем OnItemSelectedListener для изменения цвета текста вертушки выбранного элемента

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

Смотрите мой ответ на аналогичный вопрос here. Мой ответ похож на Priya's, за исключением того, что он правильно устанавливает цвет текста по умолчанию выбранного элемента (так что нет задержки с неправильным цветом, ожидая, пока счетчик автоматически выберет элемент по умолчанию, который возникает после того, как пользовательский интерфейс уже включен, экран).

4

просто использовать эту линию onItemSelected - у слушателя

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

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


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

} 
0

Если вертушка используется в ArrayAdapter, вы можете просто передать пользовательский макет для ваших деталей роллерных. Этот макет может быть простым textView, но с атрибутом 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"/> 

* Все из выше макет для андроида за исключением: TextColor является прямой копией с android.R.layout.simple_spinner_item

4

Вы можете изменить выбранный цвет текста, добавляя OnItemSelectedListener к spinner

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) { 

    } 
}); 
+0

Это единственный ответ, который фактически работает – instanceof

+0

Отлично! Добавьте это, чтобы изменить размер текста, пока вы на нем: ((TextView)) .setTextSize (30f); – pollaris

0

Вам не нужно Java-код для изменения цвета фона в Android 2.3В. Просто добавьте android:background="#F0F8FF" к вашему счетчику в XML-файле.

0

некоторые из вас, что с помощью MaterialBetterSpinner и привязка ваших раскладок, все вышесказанное не поможет, попробуйте это, надеюсь, это поможет вам:

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 что-то вроде этого:

<?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> 

создать блесну с адаптером и yourXML:

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

final MaterialBetterSpinner spinner = new MaterialBetterSpinner(getContext()); 
spinner.setAdapter(adapter); 
0
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

Решение, которое сработало для меня, состояло в использовании CheckedTextView для раскрывающегося списка ресурсов, а затем изменения цвета отмеченного элемента с помощью селектора цветов.

spinner_dropdown_item.xml в папке layout:

<?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 в папке color:

<?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 должен быть установлен как DropDownResourceView для Adapter. В моем случае я использую ResourceArrayAdapter, который извлекает информацию из нескольких источников.

// 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); 

Поскольку ResourceCursorAdapter использует тот же bindView для заполнения кок, когда она открыта и закрыта, идентификатор TextView в spinner_dropdown_item.xml и spinner_item.xml должны быть одинаковыми.

spinner_item.xml в layout папке:

<?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

Я знаю, что это старый вопрос, но у меня была большая проблема на изменение цвета выбранного элемента в блесны в TabLayout, и это действительно работает для меня:

spinner.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
      @Override 
      public void onGlobalLayout() { 
       ((TextView) spinner.getSelectedView()).setTextColor(Color.WHITE); //change to your color 
      } 
     }); 
Смежные вопросы