2017-02-01 7 views
1

Я пытаюсь настроить вид SeekBar следующим образом:Layer-List с элементами, имеющими верхние/нижние свойствами

<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 виртуального устройства, как: enter image description here

Однако его результаты на Levovo Vibe C с Android 5.1.1 (уровень API 22) странно: enter image description here

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

+0

По какой-либо причине вы используете 'pt'? И не 'dp'? – weston

+0

@weston на самом деле, нет ... – ram

+0

Хорошо, это не проблема, но вы обычно должны использовать 'dp'. Вы должны изучить различия. – weston

ответ

1

Причина: itemandroid: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 см here и android documentation.

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" 
    /> 

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

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

+0

Это объясняет, почему большой палец почти невидим, спасибо. Но почему это прогрессирование столь густое? Есть ли аналогичная проблема для верхнего, нижнего и т. Д.? А также, как я могу установить размер большого пальца? – ram

+0

Я добавил, как я буду это делать. – weston

+0

Будет ли это также определять толщину области прогресса? – ram