自定义搜寻栏(缩略图大小,颜色和背景)


70

我想在我的Android项目中使用这个seekbar: 在此处输入图片说明

这是我的seekbar:

<SeekBar
        android:id="@+id/seekBar_luminosite"
        android:layout_width="@dimen/seekbar_width"
        android:layout_height="@dimen/seekbar_height"
        android:minHeight="15dp"
        android:minWidth="15dp"
        android:maxHeight="15dp"
        android:maxWidth="15dp"
        android:progress="@integer/luminosite_defaut"
        android:progressDrawable="@drawable/custom_seekbar"
        android:thumb="@drawable/custom_thumb" />

这是我的custom_thumb.xml:

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

    <gradient
        android:angle="270"
        android:endColor="@color/colorDekraOrange"
        android:startColor="@color/colorDekraOrange" />

    <size
        android:height="35dp"
        android:width="35dp" />

</shape>

这是我的custom_seekbar.xml:

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

    <item
        android:id="@android:id/background"
        android:drawable="@drawable/seekbar"/>
    <item android:id="@android:id/progress">
        <clip android:drawable="@color/colorDekraYellow" />
    </item>

</layer-list>

这是我的seekbar.png(背景):

在此处输入图片说明

结果是: 在此处输入图片说明

酒吧没有阴影,没有圆形的边界...

我真的不知道该怎么办。


您所需的输出图像中的那些蓝色线条是什么?
Charuක17年

3
您是否尝试过android:minHeight android:maxHeight
Charuක

1
使用android:progressDrawable
IntelliJ Amiya

那是

1
旁注:如果将SeekBar的android:minHeightandroid:maxHeight设置为相同的大值,它将增加拇指的“命中”区域,使其更易于抓取和移动(同时设置两个值以避免Android 4.4上的错误)。Android 6/7具有默认的SeekBar高度,该高度非常小,很难单击。
Mr-IDE

Answers:


64
  • 首先,android:splitTrack="false"用于解决拇指的透明度问题。

  • 对于seekbar.png,您必须使用9补丁。这将对圆角边框和图像阴影很有帮助。


2
第一次提供赏金时,我就为此工作(没有运气)。仅添加'splitTrack'使我的工作正常。好答案。
Gary99 '17

118

全部完成XML(无.png图像)。聪明的地方是border_shadow.xml

关于 vectors这些日子...

屏幕截图:

搜寻栏
这是你SeekBarres/layout/???.xml):

搜索栏

<SeekBar
    android:id="@+id/seekBar_luminosite"
    android:layout_width="300dp"
    android:layout_height="wrap_content"        
    android:progress="@integer/luminosite_defaut"
    android:progressDrawable="@drawable/seekbar_style"
    android:thumb="@drawable/custom_thumb"/>

让它变得时尚(以便您以后可以轻松自定义它):

风格

res/drawable/seekbar_style.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item 
        android:id="@android:id/background" 
        android:drawable="@drawable/border_shadow" >
    </item>

    <item 
        android:id="@android:id/progress" > 
        <clip 
            android:drawable="@drawable/seekbar_progress" />
    </item>
</layer-list>

拇指

res / drawable / custom_thumb.xml:

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

进展

res/drawable/seekbar_progress.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list 
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item 
        android:id="@+id/progressshape" >
        <clip>
            <shape 
                android:shape="rectangle" >
                <size android:height="5dp"/>
                <corners 
                    android:radius="5dp" />
                <solid android:color="@color/colorDekraYellow"/>        
            </shape>
        </clip>
    </item>
</layer-list>

阴影

res/drawable/border_shadow.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">       
    <item>      
        <shape> 
            <corners 
                android:radius="5dp" />
            <gradient
                android:angle="270"
                android:startColor="#33000000"
                android:centerColor="#11000000"
                android:endColor="#11000000"
                android:centerY="0.2"
                android:type="linear"
            />          
        </shape> 
    </item>
</layer-list>

14
该答案仅需要android:splitTrack="false"添加到搜索栏,因此拇指在移动时不会显示白角。但是,非常感谢!
–thechaoticpanda

@thechaoticpanda是(android:splitTrack =“ false”),但Jéwôm(接受)回答说,我没有人打雷,只是希望添加到社区中(希望以独特的视角,具有良好的代码/理性)。也许我会在XML评论部分。看看Android如何做到(阴影)可能会很有趣...
Jon Goodwin

1
如果您要这样做,请不要忘记添加android:minHeight =“ 11dp” android:maxHeight =“ 11dp”,否则您将面临“ seekbar-bar-thumb-centering-issues”
Shyak Das

18

酒吧中没有阴影,没有圆形边框

您使用的是图像,所以最简单的解决方案是顺着水流划船,

您不能手动设置高度,可以,但是要确保它有足够的空间来显示完整的图像视图

  • 最简单的方法是 android:layout_height="wrap_content"用于SeekBar
  • 要获得更清晰的圆形边界,可以轻松使用与其他颜色相同的图像。

我对Photoshop不好,但是我设法编辑了一个背景进行测试

seekbar_brown seekbar_brown_to_show_progress.png

<SeekBar
    android:splitTrack="false"   // for unwanted white space in thumb
    android:id="@+id/seekBar_luminosite"
    android:layout_width="250dp"   // use your own size
    android:layout_height="wrap_content"
    android:minHeight="10dp"
    android:minWidth="15dp"
    android:maxHeight="15dp"
    android:maxWidth="15dp"
    android:progress="50"
    android:progressDrawable="@drawable/custom_seekbar_progress"
    android:thumb="@drawable/custom_thumb" />

custom_seekbar_progress.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@android:id/background"
        android:drawable="@drawable/seekbar" />
    <item android:id="@android:id/progress">
        <clip android:drawable="@drawable/seekbar_brown_to_show_progress" />
    </item>
</layer-list>

custom_thumb.xml与您的相同

最终android:splitTrack="false"将消除拇指上多余的空白

让我们看一下输出:

在此处输入图片说明


14

Android自定义SeekBar-自定义轨迹或进度,形状,大小,背景和拇指,以及其他自定义Seekbar的信息,请参见http://www.zoftino.com/android-seekbar-and-custom-seekbar-examples

自定义轨道可绘制

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background"
        android:gravity="center_vertical|fill_horizontal">
        <shape android:shape="rectangle"
            android:tint="#ffd600">
            <corners android:radius="8dp"/>
            <size android:height="30dp" />
            <solid android:color="#ffd600" />
        </shape>
    </item>
    <item android:id="@android:id/progress"
        android:gravity="center_vertical|fill_horizontal">
        <scale android:scaleWidth="100%">
            <selector>
                <item android:state_enabled="false"
                    android:drawable="@android:color/transparent" />
                <item>
                    <shape android:shape="rectangle"
                        android:tint="#f50057">
                        <corners android:radius="8dp"/>
                        <size android:height="30dp" />
                        <solid android:color="#f50057" />
                    </shape>
                </item>
            </selector>
        </scale>
    </item>
</layer-list>

自定义拇指可绘制

?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    android:thickness="4dp"
    android:useLevel="false"
    android:tint="#ad1457">
    <solid
        android:color="#ad1457" />
    <size
        android:width="32dp"
        android:height="32dp" />
</shape>

输出量

在此处输入图片说明


1
请说明相关性,<Scale>因为没有该标签,代码将无法正常工作。:)
Daksh Gargas

8

您可以使用Slider材料组件库中的官方文件。

使用app:trackHeight="xxdp"(默认值为4dp)更改跟踪栏的高度。

还可以使用以下属性来自定义颜色:

  • app:activeTrackColor:活动轨道颜色
  • app:inactiveTrackColor:无效的轨道颜色
  • app:thumbColor:填补拇指

就像是:

    <com.google.android.material.slider.Slider
        android:id="@+id/slider"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:activeTrackColor="#ffd400"
        app:inactiveTrackColor="#e7e7e7"
        app:thumbColor="#ffb300"
        app:trackHeight="12dp"
        .../>

在此处输入图片说明

它需要该库的版本1.2.0


您能帮忙将这个素材库添加到我的Kotlin项目中吗?
阿纳斯·雷扎

@AnasReza只需在您的build.gradle中添加依赖项即可。这里的所有信息
Gabriele Mariotti

可以自定义拇指图标吗?
库冯切贝克·雅库波夫

:@KuvonchbekYakubov目前,你可以自定义这些属性github.com/material-components/material-components-android/blob/...
加布里埃莱·马里奥蒂

@GabrieleMariotti,如果您为带有拇指抬高的拇指图标添加自定义设置,那就太好了。SeekBar没有thumbElevation,而Slider没有自定义thum。
库冯切贝克·雅库波夫

7

首先礼貌去@Charuka

您可以使用android:progressDrawable="@drawable/seekbar"代替android:background="@drawable/seekbar"

progressDrawable用于进度模式。

你应该尝试

android:minHeight

定义视图的最小高度。无法保证视图将能够达到此最小高度(例如,如果其父级布局以较小的可用高度限制它)。

android:minWidth

定义视图的最小宽度。无法保证视图将能够达到此最小宽度(例如,如果其父布局以较小的可用宽度对其进行约束)

    android:minHeight="25p"
    android:maxHeight="25dp" 

仅供参考:

使用android:minHeight和android:maxHeight不是一个好的解决方案。需要纠正您的自定义搜索栏(从类级别开始)



5

使用色彩;)

<SeekBar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="15dp"
        android:minWidth="15dp"
        android:maxHeight="15dp"
        android:maxWidth="15dp"
        android:progress="20"
        android:thumbTint="@color/colorPrimaryDark"
        android:progressTint="@color/colorPrimary"/>

在thumbTint和progressTint中使用所需的颜色。它快得多!:)

编辑ofc,您可以结合使用 android:progressDrawable="@drawable/seekbar"


谢谢,但是使用色调不会改变问题。而且我需要改变拇指的大小。

1
这需要分API级别21
代码

4

android:minHeight android:maxHeight对于这一点很重要。

<SeekBar
    android:id="@+id/pb"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:maxHeight="2dp"
    android:minHeight="2dp"
    android:progressDrawable="@drawable/seekbar_bg"
    android:thumb="@drawable/seekbar_thumb"
    android:max="100"
    android:progress="50"/>

seekbar_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="3dp" />
            <solid android:color="#ECF0F1" />
        </shape>
    </item>
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="3dp" />
                <solid android:color="#C6CACE" />
            </shape>
        </clip>
    </item>
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="3dp" />
                <solid android:color="#16BC5C" />
            </shape>
        </clip>
    </item>
</layer-list>

seekbar_thumb.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#16BC5C" />
    <stroke
        android:width="1dp"
        android:color="#16BC5C" />
    <size
        android:height="20dp"
        android:width="20dp" />
</shape>

2

对于未来的读者!

material-components-android 1.2.0-alpha01开始,您可以使用新slider组件

例如:

修改thumbSizethumbColortrackColor相应地。

<com.google.android.material.slider.Slider
        android:id="@+id/slider"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:valueFrom="20f"
        android:valueTo="70f"
        android:stepSize="10"
        app:thumbRadius="20dp"
        app:thumbColor="@color/colorAccent"
        app:trackColor="@android:color/darker_gray"
        />

注意:轨道角不是圆的。


-2

您可以尝试进度条而不是搜索条

<ProgressBar
    android:id="@+id/progressBar"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="fill_parent"
    android:layout_height="50dp"
    android:layout_marginBottom="35dp"
    />
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.