Android NumberPicker 在编辑文本时显示 2 个键盘
Android NumberPicker shows 2 keyboards when editing text
最初数字选择器工作得很好,但是当我把它放在列表视图项目中时,我无法输入数字。当您 select 它编辑文本时,它有时会调出文本键盘,有时会调出数字键盘。当按下数字时,您可以看到它正在注册字母键盘在它后面被按下。
这可能是列表视图项目中有数字选择器的问题吗?
我已经尝试更改几个关于焦点的属性并更改编辑文本本身的输入类型(默认情况下确实正确设置为数字)但没有成功。
号码选择器列表项 xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<NumberPicker
android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginTop="32dp" />
<TextView
android:id="@+id/minutesText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_toEndOf="@+id/timePicker"
android:layout_centerVertical="true"
android:text="@string/test"
android:textColor="@android:color/white"
android:textSize="14sp" />
</RelativeLayout>
然后在列表视图的适配器中使用它来获取数字选择器项目:
private View getNumberPickerView(int position, View convertView, ViewGroup parent) {
NumberPickerViewHolder holder;
if (convertView == null) {
convertView = mInflator.inflate(R.layout.number_picker_list_item, parent,false);
holder = new NumberPickerViewHolder();
holder.numberPicker = (NumberPicker) convertView.findViewById(R.id.timePicker);
holder.minutesText = (TextView) convertView.findViewById(R.id.minutesText);
convertView.setTag(holder);
}
else {
holder = (NumberPickerViewHolder) convertView.getTag();
}
if (position == mNumberPickerPos) {
holder.numberPicker.setMinValue(0);
holder.numberPicker.setMaxValue(300);
holder.minutesText.setText(R.string.test);
}
return convertView;
}
NumberPickerViewHolder 只是一个内部 class,用于重用列表视图项。
编辑:我还有一个数字选择器的 onValueChange 侦听器。我不认为这会导致问题,但我还是检查了一下。删除后问题仍然存在。
似乎没有人对此有答案。我最终做的是将 NumberPicker 从 ListView 项目中取出并用一个 EditText 替换它,该 EditText 打开一个对话框,其中包含 NumberPicker。它工作得很好,因为它不再是 ListView 项目的一部分
最初数字选择器工作得很好,但是当我把它放在列表视图项目中时,我无法输入数字。当您 select 它编辑文本时,它有时会调出文本键盘,有时会调出数字键盘。当按下数字时,您可以看到它正在注册字母键盘在它后面被按下。
这可能是列表视图项目中有数字选择器的问题吗?
我已经尝试更改几个关于焦点的属性并更改编辑文本本身的输入类型(默认情况下确实正确设置为数字)但没有成功。
号码选择器列表项 xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<NumberPicker
android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginTop="32dp" />
<TextView
android:id="@+id/minutesText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_toEndOf="@+id/timePicker"
android:layout_centerVertical="true"
android:text="@string/test"
android:textColor="@android:color/white"
android:textSize="14sp" />
</RelativeLayout>
然后在列表视图的适配器中使用它来获取数字选择器项目:
private View getNumberPickerView(int position, View convertView, ViewGroup parent) {
NumberPickerViewHolder holder;
if (convertView == null) {
convertView = mInflator.inflate(R.layout.number_picker_list_item, parent,false);
holder = new NumberPickerViewHolder();
holder.numberPicker = (NumberPicker) convertView.findViewById(R.id.timePicker);
holder.minutesText = (TextView) convertView.findViewById(R.id.minutesText);
convertView.setTag(holder);
}
else {
holder = (NumberPickerViewHolder) convertView.getTag();
}
if (position == mNumberPickerPos) {
holder.numberPicker.setMinValue(0);
holder.numberPicker.setMaxValue(300);
holder.minutesText.setText(R.string.test);
}
return convertView;
}
NumberPickerViewHolder 只是一个内部 class,用于重用列表视图项。
编辑:我还有一个数字选择器的 onValueChange 侦听器。我不认为这会导致问题,但我还是检查了一下。删除后问题仍然存在。
似乎没有人对此有答案。我最终做的是将 NumberPicker 从 ListView 项目中取出并用一个 EditText 替换它,该 EditText 打开一个对话框,其中包含 NumberPicker。它工作得很好,因为它不再是 ListView 项目的一部分