Android SeekBar滑块被裁剪/截断

48

当使用自定义的图像作为 SeekBar 视图的滑块时,滑块会在视图的左右边缘被裁剪。

如何修复这种行为?

7个回答

102

你可以通过设置 paddingLeftpaddingRight 为拇指宽度的一半(记得使用密度无关单位)来解决这个问题。还可以通过调用 setThumbOffset 控制滑块边缘允许的空间。


1
@Hurda mdpi(holo)尺寸为32x32,而mdpi(pre-holo)尺寸为32x29。 - Parth Mehrotra
3
注意,如果您正在使用VerticalSeekBars,则仍需使用paddingRight和paddingLeft。 - Parth Mehrotra
2
即使没有自定义的拇指可绘制对象,这种情况也发生在我身上,只是使用基于平台版本的不同主题。将“paddingLeft”和“paddingRight”设置为“16dp”似乎是确保它在所有版本中与所有标准主题一起工作的方法。 - cprcrack
4
@Roman Nurik paddingLeft和paddingRight对我的SeekBar没有任何作用。 - Ishant Sagar
9
对我来说,添加 android:thumbOffset="-0dp" 就完成了。 - Yoraco Gonzales
显示剩余5条评论

31
我自己也遇到了这个问题,我认为“正确”的决定是修改android:thumbOffset,因为SeekBar的默认样式将其设置为8像素。

1
+1!我的设计师会很欣赏这种方法,现在我们的滑块轨道可以与其他元素一样按预期左右对齐。感谢您的提示! - Marcel Ray
1
android:thumbOffset在2.3.3上没有效果。我不得不使用padding。 - jul
android:thumbOffset 在2.3.3上没有效果,但是您可以使用setThumbOffset方法。 - Brtle
这实际上是正确而有用的答案,非常感谢! - YH_WU

9

对于默认的SeekBar,我使用了以下设置,它可以很好地工作:

android:paddingLeft="6dp"
android:paddingRight="6dp"

android:thumbOffset="8dp"

1
我发现我的默认进度条拇指的底部被剪切了。这里提供的所有修复方法都没有起作用。最终我使用了...
     android:clipToPadding="false"

在父视图上。这解决了问题。

我还必须在父级上添加clipChildren="false"才能使其正常工作。 - undefined

1

仅供澄清。

在一些地方我看到了:

 android:thumbOffset="8dp"

还有一些

android:thumbOffset="8px"

所以我查看了源代码。这是原始样式。

<style name="Widget.SeekBar">
        <item name="android:indeterminateOnly">false</item>
        <item name="android:progressDrawable">@android:drawable/progress_horizontal</item>
        <item name="android:indeterminateDrawable">@android:drawable/progress_horizontal</item>
        <item name="android:minHeight">20dip</item>
        <item name="android:maxHeight">20dip</item>
        <item name="android:thumb">@android:drawable/seek_thumb</item>
        <item name="android:thumbOffset">8dip</item>
        <item name="android:focusable">true</item>
    </style>

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/styles.xml


0

对我来说没有什么方法有效,但是我只是将滑块的颜色与父布局的背景颜色不同,这样就可以了。


0
<androidx.appcompat.widget.AppCompatSeekBar
        android:id="@+id/progress_loan_period"
        android:layout_width="@dimen/dp_0"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/dp_15"
        android:progressDrawable="@drawable/seek_bar"
        android:thumb="@drawable/ic_slider"
        android:paddingStart="@dimen/dp_0"
        android:paddingEnd="@dimen/dp_0"
        android:thumbOffset="-0dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@id/label_loan_period" />

这可以完成工作


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接