我制作了一个小型图书馆,展示了如何模仿Android Lollipop的股票联系人应用程序的风格,here。
似乎在Android 5.1上,快速滚动条看起来与前一个非常不同,而且它太靠近右边,因此很难使用它。
Android 4.4的截图:
这是Android 5上的截图:
以及Android 5.1:
我试图浏览Android 5.1的所有“新内容”部分以及一些相关的类文档,但除了“setFastScrollStyle”之外我没有找到任何特别的内容。但是,我找不到任何解释如何使用它(加上它来自API 21,所以这可能不是原因)。
如何让快速滚动条位于左侧,以便更容易触摸?
你如何使用setFastScrollStyle?有没有这方面的教程?
答案 0 :(得分:8)
我遇到了同样的问题,经过几个小时的研究后,我想出了一个解决方案。此AOSP提交对我有所帮助,它显示了对Android 5.1(SDK 22)中滚动条所做的更改:Update scrollbars to match 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>
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>
这将使用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。