Android - thanh tìm kiếm kiểu dáng


229

Tôi muốn tạo kiểu cho một thanh tìm kiếm trông giống như trong hình bên dưới.

nhập mô tả hình ảnh ở đây

Bằng cách sử dụng thanh tìm kiếm mặc định, tôi sẽ nhận được một cái gì đó như thế này:

nhập mô tả hình ảnh ở đây

Vì vậy, những gì tôi cần là chỉ thay đổi màu sắc. Tôi không cần thêm phong cách. Có bất kỳ cách tiếp cận thẳng về phía trước để làm điều này hay tôi nên xây dựng bản vẽ tùy chỉnh của mình.?

Tôi đã thử xây dựng một tùy chỉnh, nhưng tôi không thể có được chính xác như được hiển thị ở trên. Sau khi sử dụng tùy chỉnh drawable, những gì tôi nhận được như dưới đây:

nhập mô tả hình ảnh ở đây

Nếu tôi cần xây dựng tùy chỉnh, thì vui lòng đề xuất cách giảm chiều rộng của đường tiến trình và cả hình dạng.

thực hiện tùy chỉnh của tôi:

nền_fill.xml:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <gradient
        android:angle="90"
        android:centerColor="#FF555555"
        android:endColor="#FF555555"
        android:startColor="#FF555555" />

    <corners android:radius="1dp" />

    <stroke
        android:width="1dp"
        android:color="#50999999" />
    <stroke
        android:width="1dp"
        android:color="#70555555" />

</shape>

Progress_fill.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <gradient
        android:angle="90"
        android:centerColor="#FFB80000"
        android:endColor="#FFFF4400"
        android:startColor="#FF470000" />

    <corners android:radius="1dp" />

    <stroke
        android:width="1dp"
        android:color="#50999999" />
    <stroke
        android:width="1dp"
        android:color="#70555555" />

</shape>

lũy tiến

<?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/background_fill"/>
    <item android:id="@android:id/progress">
        <clip android:drawable="@drawable/progress_fill" />
    </item>

</layer-list>

ngón tay cái

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >

    <gradient
        android:angle="270"
        android:endColor="#E5492A"
        android:startColor="#E5492A" />

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

</shape>

tìm kiếm quán bar:

<SeekBar
        android:id="@+id/seekBarDistance"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="88dp"
        android:progressDrawable="@drawable/progress"
        android:thumb="@drawable/thumb" >
    </SeekBar>

40
Cảm ơn đã hiển thị một ví dụ thay đổi kiểu tìm kiếm làm việc XD. (không nhiều trên internet).
Helin Wang

Câu trả lời:


297

Tôi sẽ trích xuất drawables và xml từ mã nguồn Android và thay đổi màu của nó thành màu đỏ. Dưới đây là ví dụ về cách tôi hoàn thành việc này cho drawable mdpi:

Tùy chỉnh red_scrubber_control.xml(thêm vào res / drawable):

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

    <item android:drawable="@drawable/red_scrubber_control_disabled_holo" android:state_enabled="false"/>
    <item android:drawable="@drawable/red_scrubber_control_pressed_holo" android:state_pressed="true"/>
    <item android:drawable="@drawable/red_scrubber_control_focused_holo" android:state_selected="true"/>
    <item android:drawable="@drawable/red_scrubber_control_normal_holo"/>
</selector>

Tập quán: red_scrubber_progress.xml

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

    <item
        android:id="@android:id/background"
        android:drawable="@drawable/red_scrubber_track_holo_light"/>
    <item android:id="@android:id/secondaryProgress">
        <scale
            android:drawable="@drawable/red_scrubber_secondary_holo"
            android:scaleWidth="100%" />
    </item>
    <item android:id="@android:id/progress">
        <scale
            android:drawable="@drawable/red_scrubber_primary_holo"
            android:scaleWidth="100%" />
    </item>

</layer-list>

Sau đó sao chép các yêu cầu rút ra từ mã nguồn Android, tôi lấy từ liên kết này

Thật tốt khi sao chép các drawable này cho mỗi hdpi, mdpi, xhdpi. Ví dụ tôi chỉ sử dụng mdpi:

Sau đó, sử dụng Photoshop thay đổi màu từ xanh sang đỏ:

red_scrubber_control_disables_holo.png: red_scrubber_control_disables_holo

red_scrubber_control_f Focused_holo.png: red_scrubber_control_f Focused_holo

red_scrubber_control_n normal_holo.png: red_scrubber_control_n normal_holo

red_scrubber_control_pressed_holo.png: red_scrubber_control_pressed_holo

red_scrubber_primary_holo.9.png: red_scrubber_primary_holo.9

red_scrubber_secondary_holo.9.png: red_scrubber_secondary_holo.9

red_scrubber_track_holo_light.9.png: red_scrubber_track_holo_light.9

Thêm SeekBar để bố trí:

<SeekBar
    android:id="@+id/seekBar1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:progressDrawable="@drawable/red_scrubber_progress"
    android:thumb="@drawable/red_scrubber_control" />

Kết quả:

nhập mô tả hình ảnh ở đây


Andrew, cảm ơn bạn đã trả lời tuyệt vời. Tôi có một vấn đề với điều này. Khi sử dụng red_scrubber_controldrawable cho ngón tay cái, tôi gặp sự cố. Nếu tất cả các ngăn kéo trong bộ chọn là như nhau, nó hoạt động tốt, nhưng nếu tôi thay đổi một trong số chúng, tôi có nhận được Resources$NotFoundException: File .../red_scrubber_control.xml from drawaable resource ID...bất kỳ suy nghĩ nào không?
karl

2
Rất tiếc. Hóa ra nó có liên quan đến stackoverflow.com/questions/6669296/ . Hình ảnh mới mà tôi đang cố thêm là vô tình 37 MB thay vì 2KB ...
karl

Có cách nào để sử dụng @dimenđể đặt kích thước của ngón tay cái dựa trên màn hình không?
Si8

1
@ SiKni8 Bạn có thể xác định kích thước khác nhau cho các kích thước màn hình khác nhau dựa trên các tham số bình thường, lớn, xlarge, sw hoặc w cho thư mục giá trị. Sau đó, chỉ cần sử dụng kích thước này trong bố cục, phong cách hoặc chủ đề của bạn. Kiểm tra này liên kết
andrew

1
Cảm ơn đã liên kết đến Trình tạo màu Holo Android. Điều đó rất hữu ích.
Cây

66

Câu trả lời của tôi được lấy cảm hứng từ câu trả lời của Andras Balázs Lajtha, nó cho phép hoạt động mà không cần tệp xml

seekBar.getProgressDrawable().setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN);
seekBar.getThumb().setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN);

Màu hộp thoại tiến trình thay đổi nhưng màu ngón tay cái không .. tại sao?
Yonatan Nir

7
Nếu bạn không cần phải làm điều này trong mã và không muốn tạo danh sách lớp và bản vẽ, v.v. bạn cũng có thể làm điều này trong xml của thanh tìm kiếm android:progressTint="@color/my_color" android:thumbTint="@color/another_color"
Daveloper87

59

Nếu bạn muốn chính xác cùng một thanh nhưng có màu đỏ, bạn có thể thêm bộ lọc màu PorterDuff theo lập trình. Bạn có thể lấy từng drawable mà bạn muốn tô màu thông qua các phương thức của lớp cơ sở ProgressBar . Sau đó thiết lập bộ lọc màu cho nó.

mySeekBar.getProgressDrawable().setColorFilter(new PorterDuffColorFilter(srcColor, PorterDuff.Mode.MULTIPLY));

Nếu điều chỉnh màu mong muốn không thể được thực hiện thông qua bộ lọc Porter Duff, bạn có thể chỉ định bộ lọc màu của riêng mình .


3
không chắc chắn vì SDK nào, proly 21, nhưng nếu bạn muốn cùng một biểu tượng chỉ khác màu, chỉ cần thêm màu "colorAccent" trong colors.xml và nó sẽ sử dụng nó
tibbi

57

Phong cách vật liệu tùy chỉnh thanh tìm kiếm Android, cho các tùy chỉnh thanh tìm kiếm khác http://www.zoftino.com/android-seekbar-and-custom-seekbar-examples

<style name="MySeekBar" parent="Widget.AppCompat.SeekBar">
    <item name="android:progressBackgroundTint">#f4511e</item>
    <item name="android:progressTint">#388e3c</item>
    <item name="android:colorControlActivated">#c51162</item>
</style>

Tìm kiếm phong cách vật liệu tùy chỉnh


2
Giải pháp tuyệt vời cho Android> 21
saltandpepper

4
Bạn có chắc chắn đó colorControlActivatedlà thông số phù hợp cho ngón tay cái? Nó phải thumbTint.
Peter Knut

Giải pháp cho API 21 dưới đây là gì?
Faisal Shaikh

42

Chỉ cần thay thế màu atributtes bằng màu của bạn

nền

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

    <stroke android:width="1dp" android:color="#D9D9D9"/>
    <corners android:radius="1dp" />

</shape>

lũy tiến

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

    <stroke android:width="1dp" android:color="#2EA5DE"/>
    <corners android:radius="1dp" />

</shape>

style.xml

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

    <item
        android:id="@android:id/background"
        android:drawable="@drawable/seekbar_background"/>
    <item android:id="@android:id/progress">
        <clip android:drawable="@drawable/seekbar_progress" />
    </item>

</layer-list>

ngón tay cái

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

    <size android:height="30dp" android:width="30dp"/>
    <stroke android:width="18dp" android:color="#882EA5DE"/>
    <solid android:color="#2EA5DE" />
    <corners android:radius="1dp" />

</shape>

1
Làm cách nào để sử dụng các tệp trong thanh tìm kiếm?
mungaih pk

@RahulRastogi bạn đã sử dụng những tập tin này như thế nào? Thật ngớ ngẩn khi câu trả lời này rất phổ biến với 0 lời giải thích về cách hoạt động của nó ...
Selali Adobor

1
@AssortTrailmix Tôi đã làm điều đó từ lâu. Hãy thử thiết lập các thuộc tính như: android: thumb = "@ drawable / thumb" và trong android: processDrawable property đặt tập tin danh sách lớp được đề cập ở trên. Bạn có thể thử: mindfiremobile.wordpress.com/2014/05/20/ Từ
Rahul Rastogi

37

Google đã làm điều này dễ dàng hơn trong SDK 21. Bây giờ chúng tôi có các thuộc tính để chỉ định màu sắc ngón tay cái:

android:thumbTint
android:thumbTintMode
android:progressTint

http://developer.android.com/reference/android/widget/AbsSeekBar.html#attr_android:thumbTint http://developer.android.com/reference/android/widget/AbsSeekBar.html#attr_android:thumbTintMode


7
tiến độ, quá.
afollestad

1
Danh sách tông màu áp dụng cho mọi thành phần UI trên Android kể từ API 21, đó là cách colorAccent được áp dụng.
afollestad

16

Tất cả những câu trả lời đều không được chấp nhận.

Năm 2019, việc định kiểu thanh tìm kiếm của bạn thành màu ưa thích dễ dàng hơn bằng cách thay đổi thành màu ProgressBarnày

<SeekBar
            android:id="@+id/seekBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:progressTint="#36970f"
            android:thumbTint="#36970f"
            />

Tạo kiểu màu cho thanh tìm kiếm của bạn theo chương trình, hãy thử đoạn mã sau

        seekBar.getProgressDrawable().setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN);
        seekBar.getThumb().setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN);

Vì sao không tán thành?
CoolMind

bởi vì các thư viện đã thay đổi
Giannis Mpountouridis

Bạn có thể xem câu trả lời của @Ahamadullah Saikat ( stackoverflow.com/a/50074961/2914140 ) hoặc lvguowei.me/post/customize-android-seekbar-color . Họ không sử dụng các thư viện và đặt màu SeekBar ngay cả đối với các API cũ.
CoolMind

11

Như đã đề cập ở trên (@andrew), việc tạo SeekBar tùy chỉnh cực kỳ dễ dàng với trang web này - http://android-holo-colors.com/

Chỉ cần kích hoạt SeekBar ở đó, chọn màu và nhận tất cả tài nguyên và sao chép vào dự án. Sau đó áp dụng chúng trong xml, ví dụ:

  android:thumb="@drawable/apptheme_scrubber_control_selector_holo_light"
  android:progressDrawable="@drawable/apptheme_scrubber_progress_horizontal_holo_light"

10

đầu ra:

nhập mô tả hình ảnh ở đây

trong tập tin bố trí:

        <android.support.v7.widget.AppCompatSeekBar
            android:id="@+id/seekBar_bn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:max="25"
            android:minHeight="10dp"
            android:progress="10"
            android:progressDrawable="@drawable/progress"
            android:thumb="@drawable/custom_thumb" />

drawable / lũy tiến

<?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/background_fill"/>
    <item android:id="@android:id/progress">
        <clip android:drawable="@drawable/progress_fill" />
    </item>

</layer-list>

drawable / background_fill.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:bottom="6dp"
        android:left="-6dp"
        android:right="-6dp"
        android:top="6dp">

        <shape android:shape="rectangle">
            <solid android:color="#888888" />
            <stroke
                android:width="5dp"
                android:color="@android:color/transparent" />
        </shape>
    </item>
</layer-list>

drawable / Progress_fill.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:bottom="6dp"
        android:left="-6dp"
        android:right="-6dp"
        android:top="6dp">

        <shape android:shape="rectangle">
            <solid android:color="@color/myPrimaryColor" />
            <stroke
                android:width="5dp"
                android:color="@android:color/transparent" />
        </shape>
    </item>
</layer-list>

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/myPrimaryColor"/>
            <size
                android:width="22dp"
                android:height="22dp"/>
        </shape>
    </item>
</layer-list>

màu sắc

<color name="myPrimaryColor">#660033</color>

1
không biết AppCompat Seekbar đã tồn tại
Pierre


9
<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:progressTint="@color/red"
android:thumbTint="@color/red" />

hoạt động Giống như câu trả lời được chọn. không cần tạo bất kỳ tập tin có thể vẽ nào khác. (Chỉ trong 5.0) Trân trọng


5

Theo mặc định, Android sẽ khớp màu tiến trình của thanh trượt của bạn với

`<item name="colorAccent">`

giá trị trong tệp style.xml của bạn . Sau đó, để đặt hình ảnh ngón tay cái trượt tùy chỉnh, chỉ cần sử dụng mã này trong khối bố cục SeekBar xml của bạn:

android:thumb="@drawable/slider"

5
LayerDrawable progressDrawable = (LayerDrawable) mSeekBar.getProgressDrawable();

// progress bar line *progress* color
Drawable processDrawable = progressDrawable.findDrawableByLayerId(android.R.id.progress);

// progress bar line *background* color
Drawable backgroundDrawable = progressDrawable.findDrawableByLayerId(android.R.id.background);

// progress bar line *secondaryProgress* color
Drawable secondaryProgressDrawable = progressDrawable.findDrawableByLayerId(android.R.id.secondaryProgress);
processDrawable.setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN);

// progress bar line all color
mSeekBar.getProgressDrawable().setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_IN);

// progress circle color
mSeekBar.getThumb().setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_IN);

4

Đối với API <21 (và> = 21), bạn có thể sử dụng câu trả lời của @Ahamadullah Saikat hoặc https://www.lvguowei.me/post/customize-android-seekbar-color/ .

nhập mô tả hình ảnh ở đây

<SeekBar
    android:id="@+id/seekBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:maxHeight="3dp"
    android:minHeight="3dp"
    android:progress="50"
    android:progressDrawable="@drawable/seek_bar_ruler"
    android:thumb="@drawable/seek_bar_slider"
    />

drawable / seek_bar_ruler.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 android:shape="rectangle">
            <solid
                android:color="#94A3B3" />
            <corners android:radius="2dp" />
        </shape>
    </item>
    <item android:id="@android:id/progress">
        <clip>
            <shape android:shape="rectangle">
                <solid
                    android:color="#18244D" />
                <corners android:radius="2dp" />
            </shape>
        </clip>
    </item>
</layer-list>

drawable / seek_bar_slider.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval"
    >

    <solid android:color="#FFFFFF" />
    <stroke
        android:width="4dp"
        android:color="#18244D"
        />
    <size
        android:width="25dp"
        android:height="25dp"
        />
</shape>

3

Nếu bạn đang sử dụng SeekBar mặc định được cung cấp bởi Android Sdk thì đây là một cách đơn giản để thay đổi màu sắc của nó. chỉ cần truy cập color.xml bên trong /res/values/colors.xml và thay đổi colorAccent.

<resources>
    <color name="colorPrimary">#212121</color>
    <color name="colorPrimaryDark">#1e1d1d</color>
     <!-- change below line -->
    <color name="colorAccent">#FF4081</color>
</resources>

2

Tôi thay đổi background_fill.xml

<?xml version="1.0" encoding="UTF-8"?>
  <shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line" >
<size android:height="1dp" />
<gradient
    android:angle="0"
    android:centerColor="#616161"
    android:endColor="#616161"
    android:startColor="#616161" />
<corners android:radius="0dp" />
<stroke
    android:width="1dp"
    android:color="#616161" />
<stroke
    android:width="1dp"
    android:color="#616161" />
</shape>

progress_fill.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line" >
<size android:height="1dp" />
<gradient
    android:angle="0"
    android:centerColor="#fafafa"
    android:endColor="#fafafa"
    android:startColor="#fafafa" />
<corners android:radius="1dp" />
<stroke
    android:width="1dp"
    android:color="#cccccc" />
<stroke
    android:width="1dp"
    android:color="#cccccc" />
 </shape>

để làm nền & tiến 1dpđộ chiều cao.


2

Cách đơn giản để thay đổi màu thanh tìm kiếm ...

 <ProgressBar
            android:id="@+id/progress"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:theme="@style/Progress_color"/>

Phong cách: Progress_color

 <style name="Progress_color">
    <item name="colorAccent">@color/white</item> <!-- Whatever color you want-->
</style>

lớp java thay đổi ProgressDrawable ()

seek_bar.getProgressDrawable().setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.MULTIPLY);

1

Nếu bạn nhìn vào tài nguyên Android, thanh tìm kiếm thực sự sử dụng hình ảnh.

Bạn phải tạo một drawable trong suốt ở trên và dưới để nói 10px và dòng 5px ở giữa có thể nhìn thấy được.

Tham khảo hình ảnh đính kèm. Bạn cần chuyển đổi nó thành NinePatch.

nhập mô tả hình ảnh ở đây


bạn có thể vui lòng gợi ý một số bài viết trên cùng không?
suresh cheemalamudi

Một trong những liên kết tốt mà tôi tìm thấy - mokasocial.com/2011/02/ Khăn
Sagar Waghmare

Giải pháp của Chủ nhật G Akinsete hoạt động, không cần sử dụng NinePatch
Helin Wang

0

Đối với những người sử dụng Binding dữ liệu:

  1. Thêm phương thức tĩnh sau vào bất kỳ lớp nào

    @BindingAdapter("app:thumbTintCompat")
    public static void setThumbTint(SeekBar seekBar, @ColorInt int color) {
        seekBar.getThumb().setColorFilter(color, PorterDuff.Mode.SRC_IN);
    }
  2. Thêm app:thumbTintCompatthuộc tính vào SeekBar của bạn

    <SeekBar
           android:id="@+id/seek_bar"
           style="@style/Widget.AppCompat.SeekBar"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           app:thumbTintCompat="@{@android:color/white}"
    />

Đó là nó. Bây giờ bạn có thể sử dụng app:thumbTintCompatvới bất kỳ SeekBar. Các tiến độ có thể được cấu hình theo cùng một cách.

Lưu ý: phương pháp này cũng tương thích với các thiết bị tiền kẹo.


0

Sửa nhỏ cho câu trả lời của @ arnav-rao:

để đảm bảo rằng ngón tay cái được tô màu đúng, sử dụng:

<style name="MySeekBar" parent="Widget.AppCompat.SeekBar">
    <item name="android:progressBackgroundTint">@color/colorBgTint</item>
    <item name="android:progressTint">@color/colorProgressTint</item>
    <item name="android:thumbTint">@color/colorThumbTint</item>
</style>

ở đây android: thumbTint thực sự tô màu cho "ngón tay cái"


0

kiểm tra hướng dẫn này rất tốt

https://www.lvguowei.me/post/customize-android-seekbar-color/

đơn giản :

<SeekBar
                android:id="@+id/seekBar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:max="100"
                android:maxHeight="3dp"
                android:minHeight="3dp"
                android:progressDrawable="@drawable/seekbar_style"
                android:thumbTint="@color/positive_color"/>

sau đó một tệp kiểu:

<?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 android:shape="rectangle" >
            <solid
                android:color="@color/positive_color" />
        </shape>
    </item>
    <item android:id="@android:id/progress">
        <clip>
            <shape android:shape="rectangle" >
                <solid
                    android:color="@color/positive_color" />
            </shape>
        </clip>
    </item>
</layer-list>

0

Tôi muốn tạo một kiểu cho thanh tìm kiếm và sau đó thêm kiểu vào một chủ đề để tôi có thể áp dụng nó cho toàn bộ chủ đề trong khi vẫn cho phép một nhóm phụ ghi đè lên nó. Đây là những gì tôi đã làm:

<!-- Blue App Theme -->
    <style name="AppTheme.Blue" parent="BaseTheme.Blue">        
        <item name="android:seekBarStyle">@style/SeekbarStyle.Blue</item>
        <item name="seekBarStyle">@style/SeekbarStyle.Blue</item> <!--This is essential for some devices, e.g. Samsung-->
</style>

<!-- Slider Styles -->
<style name="SeekbarStyle.Blue" parent="Widget.AppCompat.SeekBar">
        <item name="android:progressBackgroundTint">@color/material_blue_a700_pct_30</item>
        <item name="android:thumbTint">@color/material_blue_a700</item>
        <item name="android:thumbTintMode">src_in</item>
        <item name="android:progressTint">@color/material_blue_a700</item>
</style>

<style name="SeekbarStyle.Green" parent="Widget.AppCompat.SeekBar">
        <item name="android:progressBackgroundTint">@color/material_green_a700_pct_30</item>
        <item name="android:thumbTint">@color/material_green_a700</item>
        <item name="android:thumbTintMode">src_in</item>
        <item name="android:progressTint">@color/material_green_a700</item>
</style>

Ở trên, đặt kiểu tìm kiếm Chủ đề thành màu xanh cho tất cả các thiết bị 21+ bao gồm cả Samsung (cần tìm kiếmBarStyle được áp dụng cùng với Android: seekBarStyle; không biết tại sao nhưng tôi đã thấy vấn đề này ngay từ đầu). Nếu bạn muốn tất cả các thanh tìm kiếm giữ kiểu chủ đề và chỉ áp dụng kiểu thanh tìm kiếm màu xanh lá cây cho một vài tiện ích thì hãy thêm các mục sau vào tiện ích bạn muốn:

<SeekBar
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/AppTheme.Green"/>

0

Với Thư viện thành phần vật liệu phiên bản 1.2.0, bạn có thể sử dụng Sliderthành phần mới .

 <com.google.android.material.slider.Slider
       android:valueFrom="0"
       android:valueTo="300"
       android:value="200"
       android:theme="@style/slider_red"
       />

Bạn có thể ghi đè màu mặc định bằng cách sử dụng cái gì đó như:

  <style name="slider_red">
    <item name="colorPrimary">#......</item>
  </style>

nhập mô tả hình ảnh ở đây

Nếu không, bạn có thể sử dụng các thuộc tính này trong bố cục để xác định màu hoặc bộ chọn màu:

   <com.google.android.material.slider.Slider
       app:activeTrackColor="@color/...."
       app:inactiveTrackColor="@color/...."
       app:thumbColor="@color/...."
       />

hoặc bạn có thể sử dụng một kiểu tùy chỉnh:

 <style name="customSlider" parent="Widget.MaterialComponents.Slider">
    <item name="activeTrackColor">@color/....</item>
    <item name="inactiveTrackColor">@color/....</item>
    <item name="thumbColor">@color/....</item>
  </style>

tài liệu chính thức nói rằng nó vẫn còn kế hoạch. Có cách nào khác không?
tejaspatel

@tejaspatel Trong câu trả lời có liên kết của thành phần chính thức. Phiên bản đầu tiên hiện được phát hành vào 1.2.0-alpha01.
Gabriele Mariotti

-1

Bạn cũng có thể làm theo cách này:

<SeekBar
    android:id="@+id/redSeekBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:progressDrawable="@color/red"
    android:maxHeight="3dip"/>

Hy vọng nó sẽ giúp!


1
Tôi không nghĩ bạn có thể sử dụng màu mà nó đang tìm kiếm
Lancelot
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.