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
我不知道这是好是坏,它对我有用。
我的 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
我不知道这是好是坏,它对我有用。