Android SeekBar中不需要的填充

hgb9j2n6  于 2022-12-16  发布在  Android
关注(0)|答案(5)|浏览(206)

我有问题与Android seekbar似乎有一个默认的填充seekbar视图,我似乎不能删除它,我尝试设置填充“0 dp”,并尝试设置边距“-10dp”,看看它是否删除了一些空间,并尝试设置背景为空的情况下,有一个背景占用空间,但似乎什么都没有发生,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.填充取决于拇指可绘制的大小
1.设置android:thumb="@null"将删除底部和顶部填充
1.即使我删除了缩略图,左右填充也会保留,但可以通过在两侧设置一个等于默认缩略图可绘制宽度除以2的负边距来删除,因此如果是32 dp,则两侧为16 dp
现在我需要知道是否有更干净的方法来去除填充物,拇指大小在所有设备上都一样吗?欢迎任何帮助。

drnojrws

drnojrws1#

我意识到这是3年后,但对于任何人喜欢我仍然无法找到这个解决方案,在这里。问题是拇指可绘制添加顶部/底部填充(尝试将thumb drawable设置为@null,然后观察填充消失)解决方案是将所有内容偏移thumb drawable大小的一半。要确保布局在设备之间保持一致,我们将创建一个自定义的拇指可绘制对象,以便控制大小。

第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。

<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默认为16 dp填充)。
  • 将缩略图偏移量设置为可绘制的自定义缩略图大小的一半(在我们的示例中为10 dp,因此缩略图偏移量为5dp)。
  • 给予seekbar一些高度,以确保它显示在背景内容之上(解释如下)。
    步骤3:设置媒体栏布局。

这是正确排列所有内容的关键。媒体栏将由顶级父布局组成,其中包含(1)搜索栏,以及(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>
jaxagkaj

jaxagkaj2#

要从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"

ovfsdjhp

ovfsdjhp3#

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

0g0grzrc

0g0grzrc4#

我的解决方案与上面描述的类似,但在我看来要短一些。它只是基于这样一个事实:seekbar thumb drawable的大小需要根据您在SeekBar元素上定义的属性android:minHeightandroid:maxHeight重新定义。只需注意value**@dimen/seek_bar_height***在哪里使用。
最终的SeekBar如下所示:

组件本身:

<SeekBar
    android:id="@+id/seekBarAudio"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="@dimen/seek_bar_height"
    android:maxHeight="@dimen/seek_bar_height"
    android:paddingStart="0dp"
    android:paddingEnd="0dp"
    android:progressDrawable="@drawable/seekbar"
    android:thumb="@drawable/seekbar_thumb"/>

资源 @drawable/seekbar 简单定义为:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@android:id/progress">
    <clip>
        <shape>
            <solid android:color="@color/colorAccent"/>
        </shape>
    </clip>
</item>

</layer-list>

@drawable/seekbar_thumb 作为:

<shape xmlns:android="http://schemas.android.com/apk/res/android">

<size
    android:width="@dimen/seek_bar_height"
    android:height="@dimen/seek_bar_height"/>

</shape>

虽然手动进度选择仍然是可能的,但用户可能会觉得有点不舒服,因为“拇指”是不可见的。所以请小心使用。

bmp9r5qi

bmp9r5qi5#

只需在XML代码中写入这些行,并根据需要更改值即可。

android:layout_marginStart="-16dp"
android:layout_marginEnd="-16dp"

相关问题