如何在Lollipop 5.1上处理快速滚动条?

and*_*per 6 android android-listview fastscroll android-scrollbar android-5.0-lollipop

背景

我做了一个小库,它展示了如何模仿运行Android Lollipop的股票联系人应用程序的风格,在这里.

问题

似乎在Android 5.1上,快速滚动器看起来与前一个非常不同,并且它太靠近右侧,因此很难使用它.

Android 4.4的屏幕截图:

在此输入图像描述

这是Android 5上的截图:

在此输入图像描述

在Android 5.1上:

在此输入图像描述

我发现了什么

我试图浏览Android 5.1的所有"新内容"部分,以及一些相关的类文档,但除了" setFastScrollStyle " 之外我没有找到任何特别的内容.但是,我找不到任何解释如何使用它(加上它来自API 21,所以这可能不是原因).

这个问题

如何使快速滚动条位于左侧,以便更容易触摸它?

你如何使用setFastScrollStyle?有没有这方面的教程?

Hub*_*uby 8

我遇到了同样的问题,经过几个小时的研究后,我想出了一个解决方案.这个AOSP提交给了我最多的帮助,它显示了对Android 5.1(SDK 22)中滚动条所做的更改:更新滚动条以匹配Material spec

有两种可能性:

在此输入图像描述

答:使用新样式并添加填充

这将保持API 21(Android 5.1)中相同的新矩形,但左右添加一些填充.

1:将fastscroll_thumb_material.xml复制到drawables文件夹

这应该是内容(删除AOSP注释以节省空间):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:tint="?attr/colorControlActivated"
            android:shape="rectangle">
            <solid android:color="@android:color/white" />
            <size android:width="8dp" android:height="48dp" />
        </shape>
    </item>
    <item>
        <shape android:tint="?attr/colorControlNormal"
            android:shape="rectangle">
            <solid android:color="@android:color/white" />
            <size android:width="8dp" android:height="48dp" />
        </shape>
    </item>
</selector>
Run Code Online (Sandbox Code Playgroud)

2:编辑你的主题

将以下项添加到主题中.我认为你可以把它放在一个风格并使用它setFastScrollStyle,但我发现这更容易.

<item name="android:fastScrollThumbDrawable">@drawable/fastscroll_thumb_material</item>
Run Code Online (Sandbox Code Playgroud)

3:编辑fastscroll_thumb_material.xml

您可以根据自己的喜好对其进行编辑,但我执行了以下操作,在滚动条的左侧和右侧添加了8dp.我加了层列表和项目每个形状,并加入android:right="8dp"android:left="8dp"新的项目.我尝试将其添加到原始项目,但这不起作用,也没有添加填充到形状.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <layer-list>
            <item android:right="8dp" android:left="8dp">
                <shape android:tint="?attr/colorControlActivated"
                    android:shape="rectangle">
                    <solid android:color="@android:color/white" />
                    <size android:width="8dp" android:height="48dp" />
                </shape>
            </item>
        </layer-list>
    </item>
    <item>
        <layer-list>
            <item android:right="8dp" android:left="8dp">
                <shape android:tint="?attr/colorControlNormal"
                    android:shape="rectangle">
                    <solid android:color="@android:color/white" />
                    <size android:width="8dp" android:height="48dp" />
                </shape>
            </item>
        </layer-list>
    </item>
</selector>
Run Code Online (Sandbox Code Playgroud)

B:将滚动条更改为旧样式

这将使用API​​ 21,Android 5.0风格

1:将旧的drawable添加到项目中

您可以从上面的提交(fastscroll_thumb_mtrl_alpha.png和fastscroll_track_mtrl_alpha.9.png)下载它们,但我也捆绑了它们,您也可以从我的Google云端硬盘下载它们.

2:将fastscroll_thumb_material.xml添加到drawables

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <bitmap android:src="@drawable/fastscroll_thumb_mtrl_alpha"
            android:tint="?attr/colorControlActivated" />
    </item>
    <item>
        <bitmap android:src="@drawable/fastscroll_thumb_mtrl_alpha"
            android:tint="?attr/colorControlNormal" />
    </item>
</selector>
Run Code Online (Sandbox Code Playgroud)

3:将fastscroll_track_material.xml添加到drawable中

<?xml version="1.0" encoding="utf-8"?>
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/fastscroll_track_mtrl_alpha"
    android:tint="?attr/colorControlNormal" />
Run Code Online (Sandbox Code Playgroud)

4:编辑你的主题

将以下项添加到主题中.我认为你可以把它放在一个风格并使用它setFastScrollStyle,但我发现这更容易.

<item name="android:fastScrollThumbDrawable">@drawable/fastscroll_thumb_material</item>
<item name="android:fastScrollTrackDrawable">@drawable/fastscroll_track_material</item>
Run Code Online (Sandbox Code Playgroud)

我希望这有助于实现你的目标:)


The*_*oid 1

为什么不在包含 ListView 的布局右侧设置内边距?谷歌网页@ setPadding()。就我个人而言,我使用 android:paddingLeft 来解决像您这样的类似问题。

另一个常见的技巧是在右侧(水平方向)布局中添加(隐藏)ImageView 。ImageView 将被隐藏并且可以设置(宽度)大小。

很高兴帮助一个经常使用 SO 的用户,希望我做到了。问候,汤米·奎。