我有一个带有LOOONG项目列表的微调器。我注意到的是,每当我尝试慢慢滚动微调器项目时,它突然让我回到微调器选择的顶部。我只是使用带有简单ArrayAdapter的标准Spinner。这不是一个真正的问题,但是当用户慢慢滚动时,选择会一直重置到顶部,这有点令人讨厌。你可以推送列表,但是如果你慢慢滚动,将手指放在屏幕上,它会向上滚动到列表的顶部。
还有其他人遇到过这个问题吗?它为什么会发生?有没有办法“解决”这个问题?
注意:我遇到的问题仅限于Spinner。
答案 0 :(得分:1)
我遇到了完全相同的问题并删除app:popupTheme
属性修复了它。请查看此评论:https://issuetracker.google.com/issues/37065626#comment15。
答案 1 :(得分:0)
我通过以下方法解决了这个问题。
app:popupTheme
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);
}
}