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

时间:2015-03-14 19:28:44

标签: android android-listview android-5.0-lollipop fastscroll android-scrollbar

背景

我制作了一个小型图书馆,展示了如何模仿Android Lollipop的股票联系人应用程序的风格,here

问题

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

Android 4.4的截图:

enter image description here

这是Android 5上的截图:

enter image description here

以及Android 5.1:

enter image description here

我发现了什么

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

问题

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

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

2 个答案:

答案 0 :(得分:8)

我遇到了同样的问题,经过几个小时的研究后,我想出了一个解决方案。此AOSP提交对我有所帮助,它显示了对Android 5.1(SDK 22)中滚动条所做的更改:Update scrollbars to match Material spec

有两种可能性:

enter image description here

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

这将保留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>

2:修改主题

将以下项目添加到主题中。我认为你可以将它放在一个样式中并与setFastScrollStyle一起使用,但我发现这更容易。

<item name="android:fastScrollThumbDrawable">@drawable/fastscroll_thumb_material</item>

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>

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

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

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

你可以从上面的提交中下载它们(fastscroll_thumb_mtrl_alpha.png和fastscroll_track_mtrl_alpha.9.png),但我也捆绑了它们,你也可以下载它们from my Google Drive

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>

3:将fastscroll_track_material.xml添加到您的drawables

<?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" />

4:修改主题

将以下项目添加到主题中。我认为你可以将它放在一个样式中并与setFastScrollStyle一起使用,但我发现这更容易。

<item name="android:fastScrollThumbDrawable">@drawable/fastscroll_thumb_material</item>
<item name="android:fastScrollTrackDrawable">@drawable/fastscroll_track_material</item>

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

答案 1 :(得分:1)

为什么不在包含ListView的布局的右侧侧设置填充? Google网页@ setPadding()。就个人而言,我使用android:paddingLeft来解决与你类似的问题。

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

很高兴能帮助频繁的SO用户,希望我做到了。此致,Tommy Kwee。