【问题标题】:Spinner scrolls to top when onLongPress or scrolling slowly当 onLongPress 或缓慢滚动时微调器滚动到顶部
【发布时间】:2014-11-09 10:36:35
【问题描述】:

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

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

注意:我遇到的问题只是在 Spinner 上。

【问题讨论】:

标签: android spinner gesture android-scroll


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    • 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      • 2022-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      相关资源
      最近更新 更多