避免自动选择 NumberPicker 值
Avoid NumberPicker value automatically getting selected
在我的应用程序中,我使用 3 个 NumberPickers 来选择一个 RGB 值。但总有 1 个被选中,即使 activity 打开时也是如此。在图片上你可以看到我的意思。
我想知道这是否可以避免,如果可以,如何避免。
请注意,我不想禁用单击显示数字输入的数字的功能。只停止自动选择(不会导致数字输入出现)
显示问题的图像:
提前致谢:)
编辑:
XML(在 RelativeLayout 视图中)
<NumberPicker
android:id="@+id/number_picker_R"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textview2"
android:layout_toLeftOf="@+id/number_picker_G" />
<NumberPicker
android:id="@+id/number_picker_G"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textview2"
android:layout_centerHorizontal="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" />
<NumberPicker
android:id="@+id/number_picker_B"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textview2"
android:layout_toRightOf="@+id/number_picker_G" />
Java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.tab1_presets, container, false);
... (irrelevant code omitted) ...
this.mNumberPickerR = rootView.findViewById(R.id.number_picker_R);
this.mNumberPickerG = rootView.findViewById(R.id.number_picker_G);
this.mNumberPickerB = rootView.findViewById(R.id.number_picker_B);
// set min and max values for the numberpickers
this.mNumberPickerR.setMinValue(0);
this.mNumberPickerR.setMaxValue(255);
this.mNumberPickerG.setMinValue(0);
this.mNumberPickerG.setMaxValue(255);
this.mNumberPickerB.setMinValue(0);
this.mNumberPickerB.setMaxValue(255);
// set listeners
this.mNumberPickerR.setOnValueChangedListener(this);
this.mNumberPickerG.setOnValueChangedListener(this);
this.mNumberPickerB.setOnValueChangedListener(this);
return rootView;
public NumberPicker getNumberPickerR() {
return this.mNumberPickerR;
}
public NumberPicker getNumberPickerG() {
return this.mNumberPickerG;
}
public NumberPicker getNumberPickerB() {
return this.mNumberPickerB;
}
@Override
public void onValueChange(NumberPicker numberPicker, int i, int i1) {
// get RGB values
int R = getNumberPickerR().getValue();
int G = getNumberPickerG().getValue();
int B = getNumberPickerB().getValue();
// call parent activity onColorChanged method
((MainActivity) getActivity()).onColorChanged(R, G, B);
}
在您的 NumberPicker
的父级中使用
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"
在我的应用程序中,我使用 3 个 NumberPickers 来选择一个 RGB 值。但总有 1 个被选中,即使 activity 打开时也是如此。在图片上你可以看到我的意思。
我想知道这是否可以避免,如果可以,如何避免。
请注意,我不想禁用单击显示数字输入的数字的功能。只停止自动选择(不会导致数字输入出现)
显示问题的图像:
提前致谢:)
编辑:
XML(在 RelativeLayout 视图中)
<NumberPicker
android:id="@+id/number_picker_R"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textview2"
android:layout_toLeftOf="@+id/number_picker_G" />
<NumberPicker
android:id="@+id/number_picker_G"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textview2"
android:layout_centerHorizontal="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" />
<NumberPicker
android:id="@+id/number_picker_B"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textview2"
android:layout_toRightOf="@+id/number_picker_G" />
Java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.tab1_presets, container, false);
... (irrelevant code omitted) ...
this.mNumberPickerR = rootView.findViewById(R.id.number_picker_R);
this.mNumberPickerG = rootView.findViewById(R.id.number_picker_G);
this.mNumberPickerB = rootView.findViewById(R.id.number_picker_B);
// set min and max values for the numberpickers
this.mNumberPickerR.setMinValue(0);
this.mNumberPickerR.setMaxValue(255);
this.mNumberPickerG.setMinValue(0);
this.mNumberPickerG.setMaxValue(255);
this.mNumberPickerB.setMinValue(0);
this.mNumberPickerB.setMaxValue(255);
// set listeners
this.mNumberPickerR.setOnValueChangedListener(this);
this.mNumberPickerG.setOnValueChangedListener(this);
this.mNumberPickerB.setOnValueChangedListener(this);
return rootView;
public NumberPicker getNumberPickerR() {
return this.mNumberPickerR;
}
public NumberPicker getNumberPickerG() {
return this.mNumberPickerG;
}
public NumberPicker getNumberPickerB() {
return this.mNumberPickerB;
}
@Override
public void onValueChange(NumberPicker numberPicker, int i, int i1) {
// get RGB values
int R = getNumberPickerR().getValue();
int G = getNumberPickerG().getValue();
int B = getNumberPickerB().getValue();
// call parent activity onColorChanged method
((MainActivity) getActivity()).onColorChanged(R, G, B);
}
在您的 NumberPicker
的父级中使用
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"