当onLongPress或缓慢滚动时,微调器滚动到顶部

时间:2014-11-09 10:36:35

标签: android spinner gesture android-scroll

我有一个带有LOOONG项目列表的微调器。我注意到的是,每当我尝试慢慢滚动微调器项目时,它突然让我回到微调器选择的顶部。我只是使用带有简单ArrayAdapter的标准Spinner。这不是一个真正的问题,但是当用户慢慢滚动时,选择会一直重置到顶部,这有点令人讨厌。你可以推送列表,但是如果你慢慢滚动,将手指放在屏幕上,它会向上滚动到列表的顶部。

还有其他人遇到过这个问题吗?它为什么会发生?有没有办法“解决”这个问题?

注意:我遇到的问题仅限于Spinner。

2 个答案:

答案 0 :(得分:1)

我遇到了完全相同的问题并删除app:popupTheme属性修复了它。请查看此评论:https://issuetracker.google.com/issues/37065626#comment15

答案 1 :(得分:0)

我通过以下方法解决了这个问题。

  • 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>

spinner button color is black

要解决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);
    }
}