如何更改微调器的第一个元素的文本颜色?

时间:2017-07-06 11:40:50

标签: android layout colors spinner

我必须更改微调器第一个元素的颜色,该元素显示为默认元素。 尝试了各种不起作用的方法。 提供有效的解决方案。

3 个答案:

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

在这里,我创建了arrayListspinnerarrayAdapter作为参数的通用方法,用于在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 解决方案。

  1. 子类化 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 覆盖函数上设置零位置..