取消焦点:
minutePicker.setFocusable(false);
((EditText) minutePicker.getChildAt(0)).setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// do nothing
}
});
// Suppress soft keyboard from the beginning
((EditText) minutePicker.getChildAt(0)).setInputType(InputType.TYPE_NULL);
补充:上面的取消焦点,屏蔽键盘弹出的方法可能在部分手机上虽然获取不到焦点,但是点击时仍然有键盘弹出,下面是终极取消焦点且屏蔽键盘的方法:
private void disableFocus(NumberPicker numberPicker) {
numberPicker.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
}
且该方法同意适用于TimePicker,DatePicker设置循环滚动:
minutePicker = (NumberPicker) view.findViewById(R.id.minute_picker);
minutePicker.setDisplayedValues(minuteArray); //分钟显示数组
minutePicker.setMaxValue(minuteArray.length - 1);
minutePicker.setMinValue(0);
minutePicker.setWrapSelectorWheel(true);//当待显示的条目数大于3时,设置是否可以循环滚动,注意该行应该放在上面三行的下面
监听:
minutePicker.setFormatter(AppointSetTimeActivity.this);
minutePicker.setOnValueChangedListener(AppointSetTimeActivity.this);
minutePicker.setOnScrollListener(AppointSetTimeActivity.this);
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
if(picker.getId() == R.id.hour_picker){
Log.i("yin","hour执行onValueChange"+oldVal+","+newVal);
String[] hourArray = timeVO.getHourArray();
String[] minuteArray = timeVO.getMap().get(hourArray[newVal]);
if(minuteArray==null){
Log.i("yin","minuteArray是空");
}else {
Log.i("yin","minuteArray不是空");
}
if(minutePicker == null){
Log.i("yin","minutePicker是空");
}else {
Log.i("yin","minutePicker不是空");
}
minutePicker.setDisplayedValues(minuteArray);
minutePicker.setMaxValue(minuteArray.length - 1);
minutePicker.setMinValue(0);
minutePicker.setValue(0);
}
if(picker.getId() == R.id.minute_picker){
Log.i("yin","minute执行onValueChange"+oldVal+","+newVal);
}
}
@Override
public void onScrollStateChange(NumberPicker view, int scrollState) {
if(view.getId() == R.id.hour_picker){
switch (scrollState) {
case NumberPicker.OnScrollListener.SCROLL_STATE_FLING:
Toast.makeText(this, "hour后续滑动(飞呀飞,根本停下来)", Toast.LENGTH_LONG)
.show();
break;
case NumberPicker.OnScrollListener.SCROLL_STATE_IDLE:
Toast.makeText(this, "hour不滑动", Toast.LENGTH_LONG).show();
break;
case NumberPicker.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
Toast.makeText(this, "hour滑动中", Toast.LENGTH_LONG)
.show();
break;
}
}
if(view.getId() == R.id.minute_picker){
switch (scrollState) {
case NumberPicker.OnScrollListener.SCROLL_STATE_FLING:
Toast.makeText(this, "minute后续滑动(飞呀飞,根本停下来)", Toast.LENGTH_LONG)
.show();
break;
case NumberPicker.OnScrollListener.SCROLL_STATE_IDLE:
Toast.makeText(this, "minute不滑动", Toast.LENGTH_LONG).show();
break;
case NumberPicker.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
Toast.makeText(this, "minute滑动中", Toast.LENGTH_LONG)
.show();
break;
}
}
}
@Override
public String format(int value) {
Log.i("yin","执行format");
String tmpStr = String.valueOf(value);
if (value < 10) {
tmpStr = "0" + tmpStr;
}
return tmpStr;
}