How to handle the fast-scroller on Lollipop 5.1?

后端 未结 2 1335
梦谈多话
梦谈多话 2021-02-04 18:28

Background

I\'ve made a tiny library, which shows how to mimic the style of the stock contacts app of Android Lollipop, here.

The problem

It seems th

相关标签:
2条回答
  • 2021-02-04 18:59

    Why not set padding on the right side of your layout containing the ListView? Google webpage @ setPadding(). Personally I used android:paddingLeft for a similar issue like yours.

    Another common trick is to add a (hidden) ImageView in the layout on the right side (horizontal orientation). The ImageView would be hidden and the (width) size can be set.

    Glad to help a frequent SO user, hope I did. Regards, Tommy Kwee.

    0 讨论(0)
  • 2021-02-04 19:08

    I had the same problem and after a few hours of research I came up with a solution. This AOSP commit helped me the most, it shows the changes made to the scrollbar in Android 5.1 (SDK 22): Update scrollbars to match Material spec

    There are two possibilities:

    enter image description here

    A: Use the new style and add padding

    This will keep the same new rectangle from API 21 (Android 5.1), but add some padding left and right.

    1: Copy the fastscroll_thumb_material.xml to your drawables folder

    This should be the content (removed AOSP comments to save space):

    <?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: Edit your theme

    Add the following item to your theme. I think you could put this in a style and use it with setFastScrollStyle, but I find this easier.

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

    3: Edit fastscroll_thumb_material.xml

    You can edit it to your liking, but I did the following, which adds 8dp to the left and right of the scrollbar. I added a layer-list and item around each shape and added android:right="8dp" and android:left="8dp" to the new item. I tried adding that to the original items, but that didn't work, neither did adding padding to the shape.

    <?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: Change the scrollbar to the old style

    This will use the API 21, Android 5.0 style

    1: Add the old drawables to your project

    You can download them from the commit above (fastscroll_thumb_mtrl_alpha.png and fastscroll_track_mtrl_alpha.9.png), but I also bundled them, you can also download them from my Google Drive.

    2: Add fastscroll_thumb_material.xml to your 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: Add fastscroll_track_material.xml to your 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: Edit your theme

    Add the following item to your theme. I think you could put this in a style and use it with setFastScrollStyle, but I find this easier.

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

    I hope this helps to achieve your goal :)

    0 讨论(0)
提交回复
热议问题