Android: RecyclerView 中的滚动条轨道比拇指更细
Android: scrollbar track thinner than thumb in RecyclerView
如何在不使用自定义 scrollView 的情况下在 RecyclerView 中将滚动条轨道设置为比拇指更细
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="0dp"
android:scrollbars="vertical"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:fadeScrollbars="false"
android:scrollbarSize="4dp"
android:scrollbarThumbVertical="@drawable/scroll_view_gradient"
android:scrollbarTrackVertical="@color/scroll_bar_track"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
我自己做了这个,它看起来 'nice' 并且它起作用 'somewhat nice',但是有些东西没有经过足够的测试,至少应该有点帮助。也可以在 this link 上查看。另外,这首先只是视觉上的,如果你想自定义拇指的长度,那么你需要创建一个自定义视图并操作偏移量。由于它不是问题(和这个答案)的一部分,所以我没有写它,如果有人需要它可以在上面的 link 中找到。
bottom, left, right & top 是 insets,你可以把它们看成 paddings,它们不影响布局大小,但是你应该保持 top & bottom insets 在 track 和 thumb 上相同的大小(对于垂直回收视图,水平回收视图应该使用左和右)。
还可以控制拇指和轨道的粗细,以及放置透明像素的笔触宽度,使轨道看起来比实际小。感谢@Razvan S。
scrollbar_track.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:bottom="8dp"
android:left="8dp"
android:right="8dp"
android:top="8dp">
<shape>
<solid android:color="@color/scroll_bar_color" />
<stroke
android:width="3dp"
android:color="@android:color/transparent" />
<size android:width="4dp"
android:height="4dp" />
</shape>
</item>
</layer-list>
这不需要宽度和高度属性,因为 recyclerview 会自动计算长度,轨道宽度设置拇指宽度。
thumb_shape.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:bottom="8dp"
android:left="8dp"
android:right="8dp"
android:top="8dp">
<shape android:shape="rectangle">
<solid android:color="@color/scroll_bar_color" />
<corners android:radius="4dp" />
</shape>
</item>
</layer-list>
styles.xml
<style name="scrollbar_style">
<item name="android:scrollbarAlwaysDrawVerticalTrack">true</item>
<item name="android:scrollbars">vertical</item>
<item name="android:fadeScrollbars">false</item>
<item name="android:scrollbarThumbVertical">@drawable/thumb_shape</item>
<item name="android:scrollbarTrackVertical">@drawable/scrollbar_track</item>
</style>
布局中的 recyclerview 标签:style="@style/scrollbar_style"
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
style="@style/scrollbar_style" />
现在进入第2部分,如果你想操纵拇指的长度,你需要自己计算偏移量。我通过创建一个实现 ScrollingView 的 Custom RecyclerView 并手动计算所有内容来做到这一点。
希望这对你有帮助,它对我有用。
同样对于那些想知道的人,我使用 layer-list 是因为它按我想要的方式工作,如果我切换到其他东西,我不会得到想要的行为。它可能有点缺陷,并且可能有更好的解决方案,但我通过反复试验来做到这一点,直到我产生了我可以使用的东西。
如何在不使用自定义 scrollView 的情况下在 RecyclerView 中将滚动条轨道设置为比拇指更细
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="0dp"
android:scrollbars="vertical"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:fadeScrollbars="false"
android:scrollbarSize="4dp"
android:scrollbarThumbVertical="@drawable/scroll_view_gradient"
android:scrollbarTrackVertical="@color/scroll_bar_track"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
bottom, left, right & top 是 insets,你可以把它们看成 paddings,它们不影响布局大小,但是你应该保持 top & bottom insets 在 track 和 thumb 上相同的大小(对于垂直回收视图,水平回收视图应该使用左和右)。 还可以控制拇指和轨道的粗细,以及放置透明像素的笔触宽度,使轨道看起来比实际小。感谢@Razvan S。 scrollbar_track.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:bottom="8dp"
android:left="8dp"
android:right="8dp"
android:top="8dp">
<shape>
<solid android:color="@color/scroll_bar_color" />
<stroke
android:width="3dp"
android:color="@android:color/transparent" />
<size android:width="4dp"
android:height="4dp" />
</shape>
</item>
</layer-list>
这不需要宽度和高度属性,因为 recyclerview 会自动计算长度,轨道宽度设置拇指宽度。 thumb_shape.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:bottom="8dp"
android:left="8dp"
android:right="8dp"
android:top="8dp">
<shape android:shape="rectangle">
<solid android:color="@color/scroll_bar_color" />
<corners android:radius="4dp" />
</shape>
</item>
</layer-list>
styles.xml
<style name="scrollbar_style">
<item name="android:scrollbarAlwaysDrawVerticalTrack">true</item>
<item name="android:scrollbars">vertical</item>
<item name="android:fadeScrollbars">false</item>
<item name="android:scrollbarThumbVertical">@drawable/thumb_shape</item>
<item name="android:scrollbarTrackVertical">@drawable/scrollbar_track</item>
</style>
布局中的 recyclerview 标签:style="@style/scrollbar_style"
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
style="@style/scrollbar_style" />
现在进入第2部分,如果你想操纵拇指的长度,你需要自己计算偏移量。我通过创建一个实现 ScrollingView 的 Custom RecyclerView 并手动计算所有内容来做到这一点。
希望这对你有帮助,它对我有用。
同样对于那些想知道的人,我使用 layer-list 是因为它按我想要的方式工作,如果我切换到其他东西,我不会得到想要的行为。它可能有点缺陷,并且可能有更好的解决方案,但我通过反复试验来做到这一点,直到我产生了我可以使用的东西。