自定义seeekbar端点

And*_*per 5 android seekbar android-layout android-seekbar

我想更新搜索栏UI,以便在搜索栏的两个端点都有一条垂直线.我通过在android:progressDrawable属性中设置自定义可绘制图像(端点垂直线的水平线)来尝试此操作,但该搜索条不可见(只有拇指可见).我还尝试在搜索栏的左侧和右侧创建自定义视图,但是垂直线不会保留在不同设备的准确位置.此外,由于搜索栏具有默认的左右填充,我需要给出边距以在搜索条端点处精确地显示垂直线,这对于不同的设备可以是不同的.

达到这一要求的理想方法是什么?

<SeekBar 
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxHeight="@dimen/dp1" 
android:paddingLeft="0px" 
android:paddingRight="0px" 
android:progressDrawable="@color/white"/>

<View
android:layout_width="@dimen/dp1"
android:layout_height="@dimen/dp10"
android:layout_alignLeft="@+id/seekBar"
android:layout_alignTop="@+id/seekBar"
android:layout_marginLeft="@dimen/dp16"
android:bawrckground="@color/white"
android:id="@+id/view" />
<View
android:layout_width="@dimen/dp1"
android:layout_height="@dimen/dp10"
android:layout_alignRight="@+id/seekBar"
android:layout_alignTop="@+id/seekBar"
android:layout_marginRight="@dimen/dp16"
android:background="@color/white”/>
Run Code Online (Sandbox Code Playgroud)

Reh*_*han 1

我想你已经回答了你的问题。正如您所说,差异只是因为左右填充,那么您可以通过简单地更改视图的边距来实现此目的,如下所示。假设这是您的 XML:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <View
        android:id="@+id/view1"
        android:layout_width="1dp"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/seekBar"
        android:layout_alignParentLeft="true"
        android:layout_alignTop="@+id/seekBar"
        android:background="@android:color/black" />

    <View
        android:id="@+id/view2"
        android:layout_width="1dp"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/seekBar"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/seekBar"
        android:background="@android:color/black" />

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:maxHeight="1dp"
        android:progressDrawable="@android:color/black" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

然后只需将以下行添加到您的 java 文件中:

SeekBar seekBar = (SeekBar) findViewById(R.id.seekBar);
((ViewGroup.MarginLayoutParams) findViewById(R.id.view1).getLayoutParams()).leftMargin = seekBar.getPaddingLeft();
((ViewGroup.MarginLayoutParams) findViewById(R.id.view2).getLayoutParams()).rightMargin = seekBar.getPaddingRight();
Run Code Online (Sandbox Code Playgroud)

这绝对不是最好的解决方案,但是它非常简单。

这是一些它的样子的图片 图1 图2 图3