NumberPicker上一篇的补充:取消焦点,设置循环滚动,监听

本文介绍了如何在Android应用中自定义时间选择器,包括取消焦点、屏蔽键盘弹出以及设置循环滚动等功能。通过提供代码示例,详细解释了每个步骤的作用,帮助开发者实现更加灵活的时间输入界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

取消焦点:

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;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值