【问题标题】:How to handle the fast-scroller on Lollipop 5.1?如何处理 Lollipop 5.1 上的快速滚动条?
【发布时间】:2015-05-17 04:12:53
【问题描述】:

背景

我制作了一个小型库,它展示了如何模仿 Android Lollipop 的股票联系人应用程序的样式,here

问题

好像在Android 5.1上,快速滚动条看起来和之前的很不一样,而且靠的太靠右了,很难用。

Android 4.4 截图:

这是 Android 5 上的屏幕截图:

在 Android 5.1 上:

我发现了什么

我尝试过查看 Android 5.1 的所有“新增功能”部分,以及一些相关的类文档,但除了 "setFastScrollStyle" 之外,我没有发现任何特别之处。但是,我找不到任何关于如何使用它的解释(加上它来自 API 21,所以这可能不是原因)。

问题

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

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

【问题讨论】:

  • 我认为这会有所帮助stackoverflow.com/questions/5978430/…
  • @BenyamEphrem 没用。
  • “但是,我找不到任何关于如何使用它的解释......”。这在谷歌中不常见吗?由我们开发人员记录详细信息。
  • @TheOriginalAndroid 我不明白。您对我没有找到信息感到失望吗?
  • @android 开发者,不,不是那样,很抱歉造成混乱。我厌倦了 Google 库/SDK 中缺乏文档。

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


【解决方案1】:

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

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

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

【讨论】:

  • 右边有一个固定宽度的空视图就可以了!不错
  • 这不会很好,因为单击项目不会对整行产生全选效果,而只会对其中的一部分产生影响,因为右侧区域有空内容。
  • @android 开发者,如果 ImageView 的宽度很窄,那么用户不太可能点击该区域。所以我认为点击一个项目不是问题。
  • @android 开发者,您是否在布局中尝试过 setPadding() 或 android:paddingRight?它对你有用吗?
  • @TheOriginalAndroid 不仅仅是点击区域,还有item的填充效果。添加填充也会有同样的问题。人们会注意到有些地方不对劲。
【解决方案2】:

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

有两种可能:

A:使用新样式并添加内边距

这将保留与 API 21 (Android 5.1) 相同的新矩形,但会在左右添加一些填充。

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

这应该是内容(为了节省空间,去掉了AOSP cmets):

<?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:将旧的drawables添加到您的项目中

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

2:将 fastscroll_thumb_material.xml 添加到您的可绘制对象中

<?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 添加到您的可绘制对象中

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

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

【讨论】:

  • 等等,这是设计使然吗?为什么 Android 应用程序似乎不受此影响?他们在那里做什么?
  • 不知道,不过使用快速滚动条的并不多。通讯录应用使用旧的快速滚动条,而 Google Play 音乐使用新的(在“我的图书馆”中)。不过,最后一个似乎有问题。
  • 但与通讯录应用相比,它看起来又大又奇怪。我没有测试你写的东西。其中哪个用于联系人应用程序?解决方案 A?另外,顺便说一句,API 22 是 Android 5.1 而不是 API 21(即 Android 5)。
  • 是的,我注意到 API 级别的错误,我已修复它。选项 B 是您应该选择具有与联系人应用程序相同的滚动条的选项。这是图像中的第三个屏幕。我已经编辑了图像以使其更清晰。
  • 你知道吗。我想我实际上喜欢新的 5.1 样式,除了弹出标签和快速滚动条之间缺少空间。我应该怎么做才能使它在 5.1 之前的版本上看起来像这样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 2017-11-13
  • 2012-04-08
  • 1970-01-01
  • 2011-02-26
相关资源
最近更新 更多