Android – Как изменить толщину SeekBar по умолчанию?

У меня есть этот SeekBar:

        <SeekBar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="26dp"
        android:id="@+id/seekbar"
        android:visibility="gone"
        android:maxHeight="3dp"/>

Я попытался изменить толщину SeekBar с помощью maxHeight. Но ничего не изменилось. Это выглядит так:

введите здесь описание изображения

Я хочу изменить толщину этого SeekBar на 3dp и сделать так: введите здесь описание изображения

Итак, мой вопрос, можно ли как-то изменить толщину SeekBar? Если да, то как?


person Joe Rakhimov    schedule 25.08.2015    source источник
comment
Вы, случайно, не придумали, как это решить?   -  person Marek M.    schedule 13.09.2016


Ответы (6)


Вы должны изменить progressDrawable и thumb из SeekBar, чтобы отрегулировать его толщину:

<SeekBar
    android:id="@+id/seekBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/indSeekBar"
    android:layout_marginTop="48dp"
    android:progressDrawable="@drawable/seek_bar"
    android:thumb="@drawable/seek_thumb"
    />

Добавьте в папку для рисования seek_bar.xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <shape
            android:shape="line">
            <stroke
                android:color="@color/seek_bar_background"
                android:width="@dimen/seek_bar_thickness"/>
        </shape>
    </item>
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape
                android:shape="line">
                <stroke
                    android:color="@color/seek_bar_secondary_progress"
                    android:width="@dimen/seek_bar_thickness"/>
            </shape>
        </clip>
    </item>

    <item android:id="@android:id/progress">
        <clip>
            <shape
                android:shape="line">
                <stroke
                    android:color="@color/seek_bar_progress"
                    android:width="@dimen/seek_bar_thickness"/>
            </shape>
        </clip>
    </item>

</layer-list>

seek_thumb.xml :

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <size
        android:height="@dimen/seek_bar_thumb_size"
        android:width="@dimen/seek_bar_thumb_size"
        />
    <solid android:color="@color/seek_bar_progress"/>
</shape>

Добавьте к ресурсам размеров (измените это, чтобы настроить толщину):

<dimen name="seek_bar_thickness">4dp</dimen>
<dimen name="seek_bar_thumb_size">20dp</dimen>

Добавьте цветовые ресурсы:

<color name="seek_bar_background">#ababab</color>
<color name="seek_bar_progress">#ffb600</color>
<color name="seek_bar_secondary_progress">#3399CC</color>

введите здесь описание изображения

person Vaibhav Jani    schedule 30.04.2018
comment
Не могли бы вы объяснить, как добавить ресурсы измерения? Я вижу возможность рисования, макет и значения в моей папке res в Android Studio, но без измерения - person stevendesu; 16.10.2019
comment
@stevendesu создайте файл dimens.xml в папке ресурсов значений, технически вы можете объявить любые строковые, цветные, размерные ресурсы в любом файле XML в папке значений, заключенной в тег ‹resources› ‹/resources› - person Vaibhav Jani; 17.10.2019

Вы должны сделать так:

<SeekBar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:thumb="@drawable/seek"
    android:progressDrawable="@drawable/seek_style"
    />

Большой палец — это круг, который можно перетаскивать, а progressDrasable — это стиль прогресса.

seek_style.xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="5dip" />
            <gradient
                android:startColor="#ff9d9e9d"
                android:centerColor="#ff5a5d5a"
                android:centerY="0.75"
                android:endColor="#ff747674"
                android:angle="270"
                />
        </shape>
    </item>

    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <gradient
                    android:startColor="#80ffd300"
                    android:centerColor="#80ffb600"
                    android:centerY="0.75"
                    android:endColor="#a0ffcb00"
                    android:angle="270"
                    />
            </shape>
        </clip>
    </item>

    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <gradient
                    android:startColor="#ff0099CC"
                    android:centerColor="#ff3399CC"
                    android:centerY="0.75"
                    android:endColor="#ff6699CC"
                    android:angle="270"
                    />
            </shape>
        </clip>
    </item>
</layer-list>

seek.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <size
        android:width="20dp"
        android:height="20dp"
        />
    <solid android:color="#60f0"/>
</shape>
person zhangxiaoping    schedule 12.10.2016

Вы можете использовать Slider< /strong>, предоставленный библиотекой компонентов материалов.

Используйте app:trackHeight="xxdp" (значение по умолчанию — 4dp), чтобы изменить высоту полосы ползунка.

    <com.google.android.material.slider.Slider
        app:trackHeight="12dp"
        .../>

введите здесь описание изображения

Если вы хотите также изменить радиус большого пальца, вы можете использовать атрибут app:thumbRadius:

        <com.google.android.material.slider.Slider
            app:trackHeight="12dp"
            app:thumbRadius="16dp"
            ../>
           

введите здесь описание изображения

Для этого требуется версия библиотеки 1.2.0.

person Gabriele Mariotti    schedule 10.10.2020

Я решил проблему с: android:scaleX=2

person Master    schedule 25.09.2020

Просто установите scaleY для высоты панели поиска и отступы, чтобы удалить внешние отступы.

 <androidx.appcompat.widget.AppCompatSeekBar
        android:id="@+id/seekbar"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:paddingStart="0sp"
        android:paddingTop="0sp"
        android:scaleY="3" />
person Gundu Bandgar    schedule 04.10.2020

Вы можете изменить толщину панели поиска, используя атрибуты minHeight и maxHeight.

android:minHeight="5dp"

android:maxHeight="5dp"

Вот как я бы сделал это в вашем xml:

<SeekBar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="26dp"
    android:id="@+id/seekbar"
    android:visibility="gone"
    android:minHeight="5dp"
    android:maxHeight="5dp"/>
person Prad    schedule 12.10.2016
comment
Это на самом деле работает, могу ли я попросить downvoters объяснить, почему это неправильно? - person Micer; 22.11.2017
comment
Это исправление молотка. Иногда это не сработает и приведет к визуальным ошибкам. - person Ricardo Alves; 20.02.2018