我通过以下方法解决了这个问题。
- API 级别 22 或更低:使用
app:popupTheme
- API 级别 23 或更高:使用
android:popupTheme
res/layout/spinner.xml
<android.support.v7.widget.AppCompatSpinner
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginRight="@dimen/toolbar_spinner_margin_right"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
res/layout-v23/spinner.xml
<android.support.v7.widget.AppCompatSpinner
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginRight="@dimen/toolbar_spinner_margin_right"
android:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
res/layout/activity_main.xml
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme"
android:popupTheme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<include layout="@layout/spinner" />
</android.support.v7.widget.Toolbar>
并且要解决 API 级别 19 或更低级别的微调器按钮颜色为黑色的问题,您需要添加以下代码:
科特林
if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
val spinnerDrawable = spinner.background.constantState.newDrawable()
spinnerDrawable.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP)
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
spinner.background = spinnerDrawable
} else {
spinner.setBackgroundDrawable(spinnerDrawable)
}
}
Java
if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
Drawable spinnerDrawable = spinner.getBackground().getConstantState().newDrawable();
spinnerDrawable.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
spinner.setBackground(spinnerDrawable);
} else {
spinner.setBackgroundDrawable(spinnerDrawable);
}
}