Android Anko 搜索栏换肤

Android Anko seekbar skinning

我的 anko dsl(我使用 0.10.4)布局中有一个这样的 SeekBar

seekBar {
                max = 2
                progress = 1
                progressDrawable = drawable(R.drawable.seek_bar_progress)
                thumb = drawable(R.drawable.seek_bar_thumb)
                onSeekBarChangeListener {
                    onProgressChanged { _, progress, _ ->
                        // Something
                    }
                }
            }.lparams(matchParent) {
                setMargins(dip(16), dip(8), dip(16), dip(8))
            }

seek_bar_progress.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
        <solid android:color="#D9D9D9"/>
    </shape>
</item>
<item android:id="@android:id/progress">
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
        <solid android:color="@color/colorRed"/>
    </shape>
</item>

seek_bar_thumb.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item >
    <shape android:shape="oval">
        <solid android:color="@color/colorRed"/>
        <size android:height="26dp" android:width="26dp"/>
    </shape>
</item>

而且我在任何 android 设备上使用此设置时都很难看 see picture.

但是当我使用 "include" 标签时,我有一个正确的搜索栏实现 see picture

include<SeekBar>(R.layout.seek_lay) {
                progress = 1
                onSeekBarChangeListener {
                    onProgressChanged { _, progress, _ ->
                        // Something
                    }
                }
            }.lparams(matchParent) {
                setMargins(dip(16), dip(8), dip(16), dip(8))
            }

seek_lay.xml

<SeekBar xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:max="2"
android:maxHeight="2dp"
android:minHeight="2dp"
android:progress="1"
android:progressDrawable="@drawable/seek_bar_progress"
android:thumb="@drawable/seek_bar_thumb"
/>

有人遇到同样的问题吗?如果可能的话,我该如何解决这个问题? 谢谢

我今天遇到了同样的问题。我也搜索了几个小时来解决这个问题,但我根本找不到任何 'normally' 解决方案。

最后,我用 java 反射更改字段 mMaxHeight 以实现结果。

只要注意mMaxHeight属于ProgressBar.class,所以需要使用 ProgressBar.class 找到它。

val field = ProgressBar::class.java.getDeclaredField("mMaxHeight")
val accessible = field.isAccessible
field.isAccessible = true
field.setInt(seekBar, [value])
field.isAccessible = accessible

Result

我不知道这是好是坏,它对我有用。