自定义seeekbar端点

时间:2016-08-27 10:02:02

标签: android android-layout seekbar 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”/>

3 个答案:

答案 0 :(得分:1)

你看起来像这样吗?我使用了.05作为终点的布局权重和.90(%)的搜索栏...也给了拇指。你可以根据自己的要求改变它。

enter image description here

<LinearLayout
    android:id="@+id/ll_wizard_bar"
    style="@style/Widget.AppCompat.ButtonBar"
    android:layout_width="match_parent"
    android:layout_gravity="center_vertical"
    android:layout_height="30dp"
    android:layout_margin="18dp"
    android:orientation="horizontal">
    <View
        android:layout_width="0dp"
        android:layout_weight=".05"
        android:layout_height="30dp"
        android:background="#FF0000FF" />

    <SeekBar
        android:id="@+id/my_seekbar"
        android:layout_width="0dp"
        android:layout_weight=".90"
        android:layout_height="wrap_content"
        android:maxHeight="15dip"
        android:minHeight="15dip"
        android:thumb="@android:drawable/star_big_off"
        android:progressDrawable="@drawable/oval_shape"
         android:layout_below="@+id/iv_consumericon"
        android:indeterminate="false"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        />

    <View
        android:layout_width="0dp"
        android:layout_weight=".05"
        android:layout_height="30dp"
        android:background="#FF0000FF" />
</LinearLayout>

删除边

将搜索栏连接到垂直线上..以编程方式切断填充。 my_seekbar.setPadding(0, 0, 0, 0);:礼貌 https://stackoverflow.com/a/33475281/705428

答案 1 :(得分:1)

解决方案

您可以使用程序化方式。在此处,调用setPadding

  

视图可能会添加显示滚动条所需的空间,   取决于滚动条的样式和可见性。所以价值观   从getPaddingLeft(),getPaddingTop(),getPaddingRight()返回   getPaddingBottom()可能与此调用中设置的值不同。

演示XML

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <View
        android:id="@+id/view1"
        android:layout_width="10dp"
        android:layout_height="50dp"
        android:background="#54d66a"
         />

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:progress="0"
         android:max="100"
        android:layout_toRightOf="@+id/view1"/>

    <View
        android:layout_width="10dp"
        android:layout_height="50dp"
        android:background="#000000"
        android:layout_toRightOf="@+id/seekBar"
        />
</RelativeLayout>

Java类

的OnCreate()

SeekBar SeekBarOb=(SeekBar)findViewById(R.id.seekBar);
SeekBarOb.setPadding(20,0,0,0);

不良方法

使用硬编码值。来电 DisplayMetrics

  

描述有关显示的一般信息的结构,例如   它的大小,密度和字体缩放。

DisplayMetrics metrics = getResources().getDisplayMetrics();

        int DeviceTotalWidth = metrics.widthPixels;
        int DeviceTotalHeight = metrics.heightPixels;

现在为了响应

 SeekBarOb.setPadding(DeviceTotalWidth*2/100 ,0,0,0); // add your value

<强>最后

enter image description here

<强> FYI

不要改变演示XML,在java类中添加它

 DisplayMetrics metrics = getResources().getDisplayMetrics();

    int DeviceTotalWidth = metrics.widthPixels;
    int DeviceTotalHeight = metrics.heightPixels;

    SeekBar SeekBarOb=(SeekBar)findViewById(R.id.seekBar);
    SeekBarOb.setPadding((int) (DeviceTotalWidth*.85/100),0, (int) (DeviceTotalWidth*2.10/100),0);

答案 2 :(得分:1)

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

"X", "Y"

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

scan(text=c(rbind(rep("X Y", length(v1)),  v1)), what = "", quiet=TRUE)

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

以下是几张图片 Image 1 Image 2 Image 3