Layer-List with items having top/bottom properties

北战南征 提交于 2019-12-10 11:41:29

问题


I am trying to customize the view of the SeekBar as follows:

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

The content of seekbar_progress.xml is,

<?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>

and the content of the seekbar_thumb.xml is,

<?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>

This results in the desired outcome on API 25 virtual device as:

However, its outcome on a Levovo Vibe C with Android 5.1.1 (API Level 22) is weird:

What may be the reason of this? Any suggestion is highly appreciated.


回答1:


The reason is item android:width and android:height are not available until API23. Keep an eye on Android Studio for hints like this:

Therefore on the older, API22 device, it behaves as though you haven't set them at all.

Here is an alternative for the seekbar_thumb.xml file:

<?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>

The thickness differences could be down to the use of pt over dp, see here and the 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>

Do not specify dimensions at all in that file.

Usage:

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

The maxHeight is restricting the bar's height, but not the thumb.

Again I highly recommend using dp not pt unless you have a good reason.



来源:https://stackoverflow.com/questions/41991762/layer-list-with-items-having-top-bottom-properties

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!