我做错了什么:
之前,我听从了建议这个答案 https://stackoverflow.com/a/15380215/2423194,并在中设置文本颜色onItemSelected
方法,但该方法仅在 UI 完成后自动调用,并且您无法调用onItemSelected
直接来自您的代码。这导致了滞后。 (但是当您从下拉列表中选择一个项目时仍然需要它 - 请参阅我对此问题的解决方案。)
解决方案:
策略是在 onCreate 完成之前获取“Selected”视图并设置其文本颜色。当我在调试器中测试它时,在调试过程中没有显示任何 UIonCreate
方法,所以这保证有效。
我只需在调用后添加此代码setAdapter(...)
:
//Set the text color of the Spinner's selected view (not a drop down list view)
spinner.setSelection(0, true);
View v = spinner.getSelectedView();
((TextView)v).setTextColor(backgroundColor);
关键是调用spinner.setSelection(0, true)
与true
范围。否则,如果你只是打电话spinner.setSelection(0)
, 风景v
将为空。我发现了这一点,感谢这个答案 https://stackoverflow.com/a/6800839/2423194.
完整方法:
这是完整的方法。NOTE:代码在onItemSelected
仍然需要在那里!否则,每次从下拉列表中选择一个项目时,它的颜色都会错误。
@Override
protected void onCreate(Bundle savedInstanceState)
{
Spinner spinner = (Spinner) findViewById(R.id.spinner);
//Get rid of the normal toolbar's title, because the spinner is replacing the title.
getSupportActionBar().setDisplayShowTitleEnabled(false);
//Set the choices on the spinner by setting the adapter.
spinner.setAdapter(new SpinnerAdapter(toolbar.getContext(), new String[]{"Overview", "Story", "Specifications", "Poll", "Video"}, accentColor, backgroundColor));
//Set the text color of the Spinner's selected view (not a drop down list view)
spinner.setSelection(0, true);
View v = spinner.getSelectedView();
((TextView)v).setTextColor(backgroundColor);
//Set the listener for when each option is clicked.
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
//Change the selected item's text color
((TextView) view).setTextColor(backgroundColor);
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
}
});
}
有关 setSelection 方法源代码的更多信息,请参阅此处的 AbsSpinner.java 代码:https://android.googlesource.com/platform/frameworks/base/+/jb-release/core/java/android/widget/AbsSpinner.java https://android.googlesource.com/platform/frameworks/base/+/jb-release/core/java/android/widget/AbsSpinner.java
这是 Spinner.java 以防有帮助:https://android.googlesource.com/platform/frameworks/base/+/jb-release/core/java/android/widget/Spinner.java https://android.googlesource.com/platform/frameworks/base/+/jb-release/core/java/android/widget/Spinner.java