Цвет текста закрытого счетчика
Я понимаю, что закрытая прядильница на самом деле является View
, я думаю. Но я предполагаю, что там есть TextView
где-то, чтобы показать текст. Как получить доступ к этому TextView
, чтобы я мог изменить цвет текста?
EDIT: мне нужно изменить это программно "на лету", а не в XML.
TextView v = (TextView) getView(mySpinner);
v.setTextColor(.....
Это не работает...
Спасибо!
array_typ=new String[5];
array_typ[0]="Pressure";
array_typ[1]="Level";
array_typ[2]="Overage";
array_typ[3]="Under";
array_typ[4]="Taken";
adaptertyp = new ArrayAdapter<Object>(this,R.layout.simple_spinner_item, array_typ);
typ.setAdapter(adaptertyp);
Ответы
Ответ 1
Я понимаю, что закрытый прядильщик на самом деле является View, я думаю.
Да. В частности, это то, что вы сказали создать SpinnerAdapter
.
Но я предполагаю, что TextView там где-то, чтобы показать текст.
Это будет зависеть от того, что вы сказали создать SpinnerAdapter
.
Как получить доступ к этому TextView, чтобы я мог изменить цвет текста?
В идеале вы этого не сделаете - вы даете ему правильный цвет в первую очередь, используя все, что вы сказали, чтобы ваш SpinnerAdapter
создавал. Если цвет меняется, переопределите getView()
в SpinnerAdapter
и измените цвет в этой точке.
В крайнем случае вы можете попробовать позвонить getSelectedView()
, чтобы получить текущую View
, отображаемую закрытым Spinner
, но любое изменение, которое вы делаете здесь, может быть устранено при следующем выборе пользователя, а альтернативный цвет может верните позже, если предыдущий View
будет возвращен.
Ответ 2
Чтобы изменить цвет текста, создайте новый xml файл в папке res/layout (например, my_spinner_text.xml). Добавьте текстовый вид в новый XML файл и измените, как вы хотите:
<TextView android:id="@+id/spinnerText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:textColor="#CCCCCC"
android:textSize="20dp"
xmlns:android="http://schemas.android.com/apk/res/android"/>
Создайте ArrayAdapter, который использует новый TextView и установите его на свой счетчик:
Spinner localSpinner = (Spinner)findViewById(R.id.mySpinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.spinner_array,
R.layout.my_spinner_text);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
localSpinner.setAdapter(adapter);
Ответ 3
Вы можете изменить цвет текста или получить доступ к текстовому полю в событии setOnItemSelectedListener,
spinnerObject.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
((TextView)parentView.getChildAt(0)).setTextColor(Color.rgb(249, 249, 249));
}
Ответ 4
чтобы сделать это программно, вам необходимо расширить класс адаптера, например:
ArrayAdapter<CharSequence> adapter = new ArrayAdater(this){
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
// change the color here of your v
v. ... etc. etc
}
}
Ответ 5
Для изменения Textcolor закрытого Spinner я делаю так, как это работает
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R.layout.context_row_icon, null);
}
TextView mTitle = (TextView) view.findViewById(R.id.context_label);
ImageView flag = (ImageView) view.findViewById(R.id.context_icon);
mTitle.setText(values[position].getLabel(activity));
if (!((LabelItem) getItem(position)).isEnabled()) {
mTitle.setTextColor(activity.getResources().getColor(R.color.context_item_disabled));
} else {
mTitle.setTextColor(activity.getResources().getColor(R.color.context_item));
}
return view;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R.layout.context_row_icon, null);
}
TextView mTitle = (TextView) view.findViewById(R.id.context_label);
ImageView flag = (ImageView) view.findViewById(R.id.context_icon);
mTitle.setText(values[position].getLabel(activity));
mTitle.setTextColor(activity.getResources().getColor(R.color.context_item_disabled));
return view;
}
Ответ 6
Просто попробуйте это:
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
((TextView)parent.getChildAt(0)).setTextColor(getResources().getColor(R.color.colorPrimary));