我必须更改微调器第一个元素的颜色,该元素显示为默认元素。 尝试了各种不起作用的方法。 提供有效的解决方案。
答案 0 :(得分:0)
经过一些修改后,我检查了this解决方案,此答案将帮助您更改项目的第spinner
条。
在onCreate中,将通用方法称为setSpinnerValue
:
ArrayList<String> testarray = new ArrayList<String>();
testarray.add("item0");
testarray.add("item1");
testarray.add("item2");
testarray.add("item3");
setSpinnerValue(testarray,timeSpinner,arrayAdapter);
在这里,我创建了arrayList
,spinner
和arrayAdapter
作为参数的通用方法,用于在adapter
中设置微调项。
public void setSpinnerValue(final ArrayList<String> list, Spinner spinner, ArrayAdapter<String> adapter)
{
try {
adapter = new ArrayAdapter<String>(TimePicker_Activity.this, android.R.layout.simple_spinner_item, list) {
@Override
public boolean isEnabled(int position) {
String val = String.valueOf(list.get(position));
boolean isFalse = val.contains(":False");
return !isFalse;
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public View getDropDownView(int position, View convertView, android.view.ViewGroup parent) {
View v = convertView;
if (v == null) {
Context mContext = this.getContext();
LayoutInflater vi = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(android.R.layout.simple_spinner_dropdown_item, null);
}
TextView tv = (TextView) v.findViewById(android.R.id.text1);
String val = String.valueOf(list.get(position));
tv.setText(val.replace(":False", ""));
switch (position) {
case 0:
tv.setTextColor(android.graphics.Color.GRAY);
break;
default:
tv.setTextColor(getResources().getColor(R.color.colorPrimary));
break;
}
return v;
}
};
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setSelection(0, false);
spinner.setAdapter(adapter);
} catch (Exception e) {
e.printStackTrace();
}
}
获得如下输出,
答案 1 :(得分:0)
对于那些努力使其工作的人来说,这是 Kotlin 解决方案。
子类化 ArrayAdapter
类
class CustomArrayAdapter(context: Context, resource: Int, objects: List<String>) : ArrayAdapter<String>(context, resource, objects) {
override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
val view = super.getDropDownView(position, convertView, parent)
if (view is TextView) {
if (position == 0) {
view.setTextColor(ContextCompat.getColor(parent.context, R.color.red_color_1))
} else {
view.setTextColor(ContextCompat.getColor(parent.context, R.color.blue_color_1))
}
}
return view
}
}
将适配器连接到您的列表:
fun setAdapter() {
CustomArrayAdapter(this, R.layout.custom_list_item, buildItems()).also { adapter ->
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(R.layout.custom_list_item)
// Apply the adapter to the spinner
binding.mySpinner.adapter = adapter
}
}
请记住,列表是一个 RecyclerView
。这意味着,本质上,如果您更改其中一个项目的颜色,您也必须将颜色更改为所有其他项目(如果位置 == 0 并且如果位置 != 0,则导致位置 == 0 项目将反复使用)
答案 2 :(得分:0)
override fun onItemSelected(adapterView: AdapterView<*>?, view: View?, position: Int, id: Long) {
if (position == 0) {
(view as TextView).setTextColor(resources.getColor(R.color.colorgray))
}
尝试在 itemSelected 覆盖函数上设置零位置..