Android 微调器不同的箭头颜色
Android Spinner different arrow color
1) 我对 Spinner
有奇怪的行为。如果我用 ActionBar.NAVIGATION_MODE_LIST
.
将它添加到 Action Bar
ArrayAdapter<CharSequence> barAdapter = new ArrayAdapter<CharSequence>(mContext, R.layout.projects_filter_item, android.R.id.text1, mContext.getResources().getStringArray(R.array.projects_filteres));
barAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
getActionBar().setListNavigationCallbacks(barAdapter, mOnNavigationListener);
getActionBar().setDisplayShowTitleEnabled(false);
然后天黑成这样:
2) 但如果我将它添加到 onCreateOptionsMenu
和 ActionView
这个箭头是白色的。我不更改任何 bg 或颜色属性。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.action_bar_context_menu, menu);
android.view.MenuItem filter = menu.findItem(R.id.context_menu_filter);
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(getActivity(), R.layout.projects_filter_item,
android.R.id.text1, getActivity().getResources().getStringArray(R.array.projects_filteres));
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mFilterSpinner = (Spinner)MenuItemCompat.getActionView( filter);
mFilterSpinner.setAdapter(adapter);
mFilterSpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long pos) {
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
}
3) 如果我在 fragment 的某处添加 Spinner,它看起来很好(很暗)。
为什么 Spinner
有这种不同的行为?
主题应该是这样的:
<style name="MyTheme" parent="SomeParentStyle>
<item name="actionDropDownStyle">@style/MyActionBarSpinnerStyle</item><!-- if you use ABS -->
<item name="android:actionDropDownStyle">@style/MyActionBarSpinnerStyle</item>
</style>
而 MyActionBarSpinnerStyle
应该是这样的:
<style name="MyActionBarSpinnerStyle" parent="@style/MyDropDownActionBarStyle">
<item name="android:background">@drawable/my_custom_state_list_drawable</item>
</style>
如果你使用 ABS,而不是 MyDropDownActionBarStyle
,应该是 Widget.Sherlock.Light.Spinner.DropDown.ActionBar
,如果你只针对原生 ActionBar,则应该是 Widget.Holo.Light.Spinner.DropDown.ActionBar
。
更改主题没有帮助。如果我像这样以编程方式添加 Spinner
:
android.view.MenuItem filter = menu.findItem(R.id.context_menu_filter);
mFilterSpinner = new Spinner(getActionBar().getThemedContext()); // doesn't matter what context is here, Activity, Application or ActionBar
filter.setActionView(mFilterSpinner);
Spinner
的箭头是白色的。
但正如我所说,如果我在 xml 中添加 Spinner,它看起来不错。
所以,我只是将菜单项创建为 LinearLayout
<item
android:title="Filter"
android:visible="false"
android:id="@+id/context_menu_filter"
app:actionViewClass="android.widget.LinearLayout"
android:orderInCategory="1"
app:showAsAction="always"
/>
并用 Spinner
创建简单的 xml:
<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
并在 onCreateOptionsMenu
手动膨胀此布局并添加到 LinearLayout:
android.view.MenuItem filter = menu.findItem(R.id.context_menu_filter);
mFilterSpinner = (Spinner) ((LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.temp_spinner, null);
filter.setVisible(true);
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(getActivity(), R.layout.projects_filter_item,
android.R.id.text1, getActivity().getResources().getStringArray(R.array.projects_filteres));
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
LinearLayout l = (LinearLayout) MenuItemCompat.getActionView( filter);
l.addView(mFilterSpinner);
mFilterSpinner.setAdapter(adapter);
现在应该天黑了。
1) 我对 Spinner
有奇怪的行为。如果我用 ActionBar.NAVIGATION_MODE_LIST
.
Action Bar
ArrayAdapter<CharSequence> barAdapter = new ArrayAdapter<CharSequence>(mContext, R.layout.projects_filter_item, android.R.id.text1, mContext.getResources().getStringArray(R.array.projects_filteres));
barAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
getActionBar().setListNavigationCallbacks(barAdapter, mOnNavigationListener);
getActionBar().setDisplayShowTitleEnabled(false);
然后天黑成这样:
2) 但如果我将它添加到 onCreateOptionsMenu
和 ActionView
这个箭头是白色的。我不更改任何 bg 或颜色属性。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.action_bar_context_menu, menu);
android.view.MenuItem filter = menu.findItem(R.id.context_menu_filter);
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(getActivity(), R.layout.projects_filter_item,
android.R.id.text1, getActivity().getResources().getStringArray(R.array.projects_filteres));
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mFilterSpinner = (Spinner)MenuItemCompat.getActionView( filter);
mFilterSpinner.setAdapter(adapter);
mFilterSpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long pos) {
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
}
3) 如果我在 fragment 的某处添加 Spinner,它看起来很好(很暗)。
为什么 Spinner
有这种不同的行为?
主题应该是这样的:
<style name="MyTheme" parent="SomeParentStyle>
<item name="actionDropDownStyle">@style/MyActionBarSpinnerStyle</item><!-- if you use ABS -->
<item name="android:actionDropDownStyle">@style/MyActionBarSpinnerStyle</item>
</style>
而 MyActionBarSpinnerStyle
应该是这样的:
<style name="MyActionBarSpinnerStyle" parent="@style/MyDropDownActionBarStyle">
<item name="android:background">@drawable/my_custom_state_list_drawable</item>
</style>
如果你使用 ABS,而不是 MyDropDownActionBarStyle
,应该是 Widget.Sherlock.Light.Spinner.DropDown.ActionBar
,如果你只针对原生 ActionBar,则应该是 Widget.Holo.Light.Spinner.DropDown.ActionBar
。
更改主题没有帮助。如果我像这样以编程方式添加 Spinner
:
android.view.MenuItem filter = menu.findItem(R.id.context_menu_filter);
mFilterSpinner = new Spinner(getActionBar().getThemedContext()); // doesn't matter what context is here, Activity, Application or ActionBar
filter.setActionView(mFilterSpinner);
Spinner
的箭头是白色的。
但正如我所说,如果我在 xml 中添加 Spinner,它看起来不错。
所以,我只是将菜单项创建为 LinearLayout
<item
android:title="Filter"
android:visible="false"
android:id="@+id/context_menu_filter"
app:actionViewClass="android.widget.LinearLayout"
android:orderInCategory="1"
app:showAsAction="always"
/>
并用 Spinner
创建简单的 xml:
<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
并在 onCreateOptionsMenu
手动膨胀此布局并添加到 LinearLayout:
android.view.MenuItem filter = menu.findItem(R.id.context_menu_filter);
mFilterSpinner = (Spinner) ((LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.temp_spinner, null);
filter.setVisible(true);
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(getActivity(), R.layout.projects_filter_item,
android.R.id.text1, getActivity().getResources().getStringArray(R.array.projects_filteres));
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
LinearLayout l = (LinearLayout) MenuItemCompat.getActionView( filter);
l.addView(mFilterSpinner);
mFilterSpinner.setAdapter(adapter);
现在应该天黑了。