Изменение цвета текста выбранного элемента в spinner
Как изменить цвет шрифта выбранного элемента в блесне?
Я могу изменить цвет фона выбранного элемента, цвет выпадающего элемента и т. д., Но не цвет текста выбранного элемента... как я могу это сделать?
мой код: это spinner, который я использую--:
<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 пункт...
13 ответов
<item android:state_activated="true" android:color="@color/red"/>
это изменит цвет выбранного элемента во всплывающем окне.
просто используйте эту строку кода в своем 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);
}
попробуйте реализовать onItemSelected в OnItemSelectedListener для изменения цвета текста выбранного элемента spinner
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
int index = adapterView.getSelectedItemPosition();
((TextView) spinner.getSelectedView()).setTextColor(getResources().getColor(R.color.Blue)); //<----
использование селектора в качестве цвета текста .
создать 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"/>
вы можете изменить выбранный цвет текста путем добавления 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) {
}
});
просто используйте эту строку onItemSelected listner -
public void onItemSelected(AdapterView<?> parent, View arg1, int arg2,long arg3)
{
item = (String) parent.getItemAtPosition(arg2);
((TextView) parent.getChildAt(0)).setTextColor(0x00000000);
}
Я знаю, что это старый вопрос, но у меня была большая проблема с изменением цвета выбранного элемента в spinner в TabLayout, и это действительно сработало для меня:
spinner.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
((TextView) spinner.getSelectedView()).setTextColor(Color.WHITE); //change to your color
}
});
смотрите мой ответ на аналогичный вопрос здесь. Мой ответ похож на Priya, за исключением того, что он правильно устанавливает цвет текста выбранного по умолчанию элемента (поэтому нет задержки с неправильным цветом при ожидании, когда счетчик автоматически выберет элемент по умолчанию, который происходит после того, как пользовательский интерфейс уже на экране).
Если ваш счетчик использует 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. макет.simple_spinner_item
вам не нужен код java для изменения цвета фона в Android 2.3 v. просто добавьте
android:background="#F0F8FF"
в спиннер в XML-файл.
некоторые из вас, которые используют 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);
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
((TextView) adapterView.getChildAt(0)).setTextColor(Color.WHITE);
}
решение, которое сработало для меня, было использовать CheckedTextView
для выпадающего представления ресурсов, а затем измените цвет проверяемого элемента с помощью селектора цветов.
spinner_dropdown_item.xml
на :
<?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
на :
<?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
на :
<?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" />