Layer-List с элементами, имеющими верхние/нижние свойства

Я пытаюсь настроить вид SeekBar следующим образом:

<SeekBar
    android:id="@id/seek_bar_player"
    android:layout_width="match_parent"
    android:layout_height="6pt"
    android:paddingLeft="0pt"
    android:paddingRight="0pt"
    android:paddingStart="0pt"
    android:paddingEnd="0pt"
    android:layout_marginBottom="-2pt"
    android:layout_above="@id/player_container"
    android:progressDrawable="@drawable/seekbar_progress"
    android:thumb="@drawable/seekbar_thumb"
    android:padding="0pt"
    />

Содержимое seekbar_progress.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:bottom="2pt"
        android:top="2pt">
        <color android:color="@color/seekbarBackground" />
    </item>

    <item
        android:id="@android:id/progress"
        android:bottom="2pt"
        android:top="2pt">
        <clip>
            <color android:color="@color/seekbarProgressBackground" />
        </clip>
    </item>
</layer-list>

и содержимое seekbar_thumb.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:width="2pt"
        android:height="6pt">
        <color android:color="@android:color/holo_red_dark" />
    </item>
</layer-list>

Это приводит к желаемому результату на виртуальном устройстве API 25: введите здесь описание изображения

Однако его результат на Levovo Vibe C с Android 5.1.1 (уровень API 22) странный: введите здесь описание изображения

Что может быть причиной этого? Любое предложение высоко ценится.


person ram    schedule 01.02.2017    source источник
comment
По какой причине вы используете pt? А не dp?   -  person weston    schedule 02.02.2017
comment
@weston вообще-то нет...   -  person ram    schedule 02.02.2017
comment
Хорошо, это не проблема, но обычно вы должны использовать dp. Вы должны изучить различия.   -  person weston    schedule 02.02.2017


Ответы (1)


Причина в том, что item android:width и android:height недоступны до API23. Следите за Android Studio за такими подсказками:

API23

Поэтому на более старом устройстве API22 он ведет себя так, как будто вы их вообще не устанавливали.

Вот альтернатива для файла seekbar_thumb.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <solid android:color="@android:color/holo_red_dark"/>
    <size
        android:width="2pt"
        android:height="6pt"/>
</shape>

Различия в толщине могут быть связаны с использованием pt вместо dp, см. здесь и документацию по Android.

seekbar_progress.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="@color/seekbarBackground"/>
    <!-- secondary progress optional -->
    <item android:id="@android:id/secondaryProgress">
        <scale
            android:drawable="#00ffff"
            android:scaleWidth="100%"/>
    </item>
    <item android:id="@android:id/progress">
        <scale
            android:drawable="@color/seekbarProgressBackground"
            android:scaleWidth="100%"/>
    </item>
</layer-list>

Не указывайте размеры вообще в этом файле.

Использование:

<SeekBar
    ...
    android:maxHeight="2pt"
    android:progressDrawable="@drawable/seekbar_progress"
    android:thumb="@drawable/seekbar_thumb"
    />

maxHeight ограничивает высоту панели, но не большой палец.

Опять же, я настоятельно рекомендую использовать dp, а не pt, если у вас нет веской причины.

person weston    schedule 01.02.2017
comment
Это объясняет, почему большой палец почти невидим, спасибо. Но почему progressDrawable такой толстый? Есть ли аналогичная проблема для верха, низа и т. д.? А также, как я могу установить размер большого пальца? - person ram; 02.02.2017
comment
Я добавил, как я буду это делать. - person weston; 02.02.2017
comment
Будет ли это также решать толщину области прогресса? - person ram; 02.02.2017
comment
Я бы определил толщину как разницу между pt и dp. Попробуйте заменить все значениями dp. - person weston; 02.02.2017
comment
Ваше предложение формы сделало большой палец видимым, спасибо. Но свойства top и bottom в seekbar_progress.xml, по-видимому, игнорируются в API 22, т. е. его высота равна высоте большого пальца, и поэтому он толстый. У вас есть предложение по этому поводу? - person ram; 02.02.2017
comment
Вы можете использовать фигуры в элементе stackoverflow.com/questions/14436641/< /а> - person weston; 02.02.2017
comment
Я попробовал форму с <padding android:top="2pt" android:bottom="2pt"/>, но это не сработало. - person ram; 02.02.2017
comment
Я тоже пробовал фигуру с <size android:height="2pt" />, тоже не получилось. - person ram; 02.02.2017
comment
Знаете ли вы, что вы можете нажать на голосование, а также принять (выше нуля)? - person weston; 02.02.2017