Android SeekBar中不需要的填充

时间:2016-06-05 17:01:58

标签: android seekbar

我在使用Android搜索栏时出现问题似乎是搜索栏视图的默认填充,我似乎无法将其删除,我尝试将填充设置为“0dp”并尝试将边距设置为“-10dp”以查看是否存在删除一些空间并尝试将背景设置为null,因为有一个背景占用空间但似乎没有发生任何事情,SeekBar标记是:

<SeekBar
    android:paddingLeft="0px"
    android:paddingRight="0px"
    android:background="@null"
    android:id="@+id/musicSeekBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

编辑:好的,经过一些测试并尝试了一些我已经了解到的东西:

  1. 填充是由于拇指可绘制尺寸
  2. 设置android:thumb="@null"将删除底部和顶部填充
  3. 即使我移除了拇指,左右的填充也会停留,但是可以通过设置两侧的负边距等于默认的拇指可绘制宽度除以2来进行删除,这样如果它的32dp就是每边16dp
  4. 现在我需要知道是否有更清洁的方法来移除填充物,并且所有设备上的拇指尺寸是否相同?欢迎任何帮助。

3 个答案:

答案 0 :(得分:3)

要从Seekbar中删除填充,您必须在运行时执行此操作:

findViewById(R.id.seekBar).setPadding(0,0,0,0);

======================= ================ ==

Bitmap thumbImage = BitmapFactory.decodeResource(getResources(), R.drawable.thumb);
int paddingDp = (int)(0.5f * (thumbImage.getWidth()));
findViewById(R.id.seekBar).setPadding(paddingDp,0,paddingDp,0);

您无需设置android:thumb="@null"

答案 1 :(得分:3)

只需将minHeight设置为0dp,它将“删除”上方和下方的填充。

答案 2 :(得分:0)

我意识到这已经晚了3年,但是对于像我这样的人来说,仍然找不到这种解决方案,那就是。问题是可绘制的缩略图添加了顶部/底部填充(尝试将可绘制的缩略图设置为@null,然后观察填充消失)。解决方案是将所有内容偏移拇指可绘制对象的一半大小。为了确保布局在所有设备上保持一致,我们将创建一个自定义的拇指可绘制对象,以便控制大小。

第1步:创建自定义拇指可绘制图形。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape android:shape="oval">
            <size android:height="10dp" android:width="10dp" />
            <solid android:color="@color/mediaThumbColor" />
        </shape>
    </item>
</layer-list>

步骤2:设置搜索栏。

<SeekBar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:thumb="@drawable/media_seekbar_thumb"
    android:paddingStart="0dp"
    android:paddingEnd="0dp"
    android:splitTrack="false"
    android:thumbOffset="5dp"
    android:elevation="4dp"
    />
  • 将可绘制的拇指设置为我们刚刚创建的拇指。
  • 设置splitTrack=false可以解决自定义拇指可绘制对象被填充到空白栏上的问题。
  • 将开始/结束填充设置为0以确保它是完整的父级 宽度(默认情况下,SeekBar的填充为16dp)。
  • 将拇指偏移设置为可自定义拇指可绘制大小的一半(在我们的示例中为10dp,因此拇指偏移为5dp)。
  • 为搜索栏提供一定的高度,以确保其显示在背景内容之上(在下面说明)。

第3步:设置媒体栏布局。

这是正确排列所有内容的关键。媒体栏将由顶层父布局组成,其中包含(1)SeekBar,以及(2)内部父项,其中包含其他所有内容(播放/暂停,后退/前进,跟踪时间等)。顶级父级需要具有透明的背景并具有高度wrap_content。内部父母必须具有您希望媒体栏为任何背景色,以及一个高度为您想要媒体栏为任何高度。

将内部父级设置为与顶级父级 顶部对齐,其上边距为自定义拇指可绘制对象高度的一半 案例5dp。这会抵消媒体栏中的所有内容,从而使SeekBar看起来位于其顶部。

这是使用ConstraintLayout的示例。

<androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/media_bar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    >

    <SeekBar
        android:id="@+id/media_bar_seekbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:thumb="@drawable/media_seekbar_thumb"
        android:paddingStart="0dp"
        android:paddingEnd="0dp"
        android:splitTrack="false"
        android:thumbOffset="5dp"
        android:elevation="4dp"
        />

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/media_bar_content"
        android:layout_width="match_parent"
        android:layout_height="@dimen/media_bar_height"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginTop="5dp"
        android:background="@color/mediaBarColor"
        >

        <!-- All mediabar content goes here -->

    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.constraintlayout.widget.ConstraintLayout>