Lau*_*ent 35 android numberpicker android-styles
在最近的Android版本中,数字选择器在绘制时使用蓝色分隔符(参见下图).
我想改变这种颜色.有工作的解决方案吗?或者是一个包含更新版本的NumberPicker的库,它允许自定义分隔符颜色?
我尝试过android-numberpicker,但是由于库中的一些代码试图访问不存在的资源ID,我在运行时遇到错误(见下文).
android.content.res.Resources$NotFoundException: Resource ID #0x0
at android.content.res.Resources.getValue(Resources.java:1123)
at android.content.res.Resources.loadXmlResourceParser(Resources.java:2309)
at android.content.res.Resources.getLayout(Resources.java:939)
at android.view.LayoutInflater.inflate(LayoutInflater.java:395)
at net.simonvt.numberpicker.NumberPicker.<init>(NumberPicker.java:635)
at net.simonvt.numberpicker.NumberPicker.<init>(NumberPicker.java:560)
at net.simonvt.numberpicker.NumberPicker.<init>(NumberPicker.java:550)
Run Code Online (Sandbox Code Playgroud)
gab*_*bin 60
如果您只想更改颜色(基于stannums答案):
private void setDividerColor(NumberPicker picker, int color) {
java.lang.reflect.Field[] pickerFields = NumberPicker.class.getDeclaredFields();
for (java.lang.reflect.Field pf : pickerFields) {
if (pf.getName().equals("mSelectionDivider")) {
pf.setAccessible(true);
try {
ColorDrawable colorDrawable = new ColorDrawable(color);
pf.set(picker, colorDrawable);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (Resources.NotFoundException e) {
e.printStackTrace();
}
catch (IllegalAccessException e) {
e.printStackTrace();
}
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在那之后
setDividerColor(mNumberPicker, Color.GREEN);
Run Code Online (Sandbox Code Playgroud)
Rub*_*Yoo 48
这对我有用而不使用反射.
my_layout.xml
<NumberPicker
...
android:theme="@style/DefaultNumberPickerTheme" />
Run Code Online (Sandbox Code Playgroud)
Styles.xml(AppTheme是应用程序中的应用主题)
<style name="DefaultNumberPickerTheme" parent="AppTheme">
<item name="colorControlNormal">@color/dividerColor</item>
</style>
Run Code Online (Sandbox Code Playgroud)
Mar*_*ych 18
基于此(/sf/answers/1420399151/,虽然它是关于DatePicker)有几种方法:
在没有mSelectionDivider及其附属公司的情况下编写您自己的NumberPicker,或使用Vikram后向移植.在最后一种情况:
在res/drawable-xxx/np_numberpicker_selection_divider.9.png中更改drawable:
0dp
高度或透明色).或删除if (mSelectionDivider != null)
来自的onDraw(Canvas)的方法分公司NumberPicker.java喜欢这里
使用反射访问private final field mSelectionDivider
(详情:https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/NumberPicker.java) - 例如,请参阅此处的修改.我使用反射,但它不是最好的解决方案.
小智 12
我使用解决方法Java方法:
private void setDividerColor (NumberPicker picker) {
java.lang.reflect.Field[] pickerFields = NumberPicker.class.getDeclaredFields();
for (java.lang.reflect.Field pf : pickerFields) {
if (pf.getName().equals("mSelectionDivider")) {
pf.setAccessible(true);
try {
//pf.set(picker, getResources().getColor(R.color.my_orange));
//Log.v(TAG,"here");
pf.set(picker, getResources().getDrawable(R.drawable.dot_orange));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (NotFoundException e) {
e.printStackTrace();
}
catch (IllegalAccessException e) {
e.printStackTrace();
}
break;
}
}
//}
}
Run Code Online (Sandbox Code Playgroud)
或Kotlin方法:
private fun NumberPicker.setDividerColor(color: Int) {
val dividerField = NumberPicker::class.java.declaredFields.firstOrNull { it.name == "mSelectionDivider" } ?: return
try {
dividerField.isAccessible = true
dividerField.set(this,getResources().getDrawable(R.drawable.dot_orange))
} catch (e: Exception) {
e.printStackTrace()
}
}
Run Code Online (Sandbox Code Playgroud)
并应用它
setDividerColor(yourNumberPicker); // for java method
yourNumberPicker.setDividerColor(Color.RED) // for kotlin method
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
32769 次 |
最近记录: |