Android Numberpicker默认值不存在
加载numberpicker时,默认值在触摸之前不会显示在屏幕上 一经触摸,一切正常。感谢您的帮助 此外,如果删除格式化程序,它也可以正常工作 dialog.xmlAndroid Numberpicker默认值不存在,android,numberpicker,Android,Numberpicker,加载numberpicker时,默认值在触摸之前不会显示在屏幕上 一经触摸,一切正常。感谢您的帮助 此外,如果删除格式化程序,它也可以正常工作 dialog.xml 提前感谢这个问题似乎是NumberPicker小部件中的一个bug 我已经用描述的方法2解决了这个问题。@Renjith 谢谢你的链接,但我认为你应该把代码链接起来,甚至粘贴到这里。 我在NumberPicker中找到了这个bug的解决方案,它在API18-26中工作,不使用反射,也不使用setDisplayedValues
提前感谢这个问题似乎是NumberPicker小部件中的一个bug 我已经用描述的方法2解决了这个问题。@Renjith 谢谢你的链接,但我认为你应该把代码链接起来,甚至粘贴到这里。
我在NumberPicker中找到了这个bug的解决方案,它在API18-26中工作,不使用反射,也不使用
setDisplayedValues()
我也遇到了同样的问题,我正在使用带字符串的NumberPicker
。
我的问题是,在使用转换打开活动后,数字选择器中的默认值不可见,即使我使用picker.setDisplayedValues(list.toString数组())设置选择器值。
因此,对我来说,解决方案如下:
private void populatePicker(NumberPicker picker, String[] strings, int index) {
picker.setDisplayedValues(null);
picker.setMinValue(0);
picker.setMaxValue(strings.length - 1);
picker.setDisplayedValues(strings);
picker.setValue(index);
try {
Field field = NumberPicker.class.getDeclaredField("mInputText");
field.setAccessible(true);
EditText inputText = (EditText) field.get(picker);
inputText.setVisibility(View.INVISIBLE);
} catch (Exception e) {
e.printStackTrace();
}
}
以下是用Kotlin的一行写成的公认答案:
// NOTE: workaround for a bug that rendered the selected value wrong until user scrolled, see also: https://stackoverflow.com/q/27343772/3451975
(NumberPicker::class.java.getDeclaredField("mInputText").apply { isAccessible = true }.get(this) as EditText).filters = emptyArray()
请注意,我建议保留注释行以记录为什么需要此代码。试试看
np.setWrapSelectorWheel(假) 是否初始文本颜色与背景颜色匹配?在没有设备的情况下,很难想象你看到了什么。下面可能是Kotlin版本的副本:你能详细说明为什么这可能比公认的答案更好吗?
Field f = NumberPicker.class.getDeclaredField("mInputText");
f.setAccessible(true);
EditText inputText = f.get(mPicker);
inputText.setFilters(new InputFilter[0]);
private void populatePicker(NumberPicker picker, String[] strings, int index) {
picker.setDisplayedValues(null);
picker.setMinValue(0);
picker.setMaxValue(strings.length - 1);
picker.setDisplayedValues(strings);
picker.setValue(index);
try {
Field field = NumberPicker.class.getDeclaredField("mInputText");
field.setAccessible(true);
EditText inputText = (EditText) field.get(picker);
inputText.setVisibility(View.INVISIBLE);
} catch (Exception e) {
e.printStackTrace();
}
}
// NOTE: workaround for a bug that rendered the selected value wrong until user scrolled, see also: https://stackoverflow.com/q/27343772/3451975
(NumberPicker::class.java.getDeclaredField("mInputText").apply { isAccessible = true }.get(this) as EditText).filters = emptyArray()