按 EditText 时的 TimePicker 对话框

TimePicker Dialog when pressing EditText

以前有人问过这个问题,但当时的答案似乎不再适用于 Android Studio,否则我遗漏了什么。

我希望在您按下编辑文本区域时显示一个时间选择器对话框,以便在编辑文本中设置时间。但是,由于某种原因,普通键盘在按下时会弹出。我没有收到任何错误,但它似乎仍然不起作用。

代码如下:

final EditText Edit_Time = (EditText) findViewById(R.id.time_view_edit);

    Edit_Time.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Calendar mcurrentTime = Calendar.getInstance();
            int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
            int minute = mcurrentTime.get(Calendar.MINUTE);

            TimePickerDialog mTimePicker;
            mTimePicker = new TimePickerDialog(TimeActivity.this, new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
                    Edit_Time.setText( selectedHour + ":" + selectedMinute);
                }
            }, hour, minute, true);
            mTimePicker.setTitle("Select Time");
            mTimePicker.show();

        }
    });

editText 的 xml 部分:

<EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/time_view_edit"
            android:text="20:00"
            android:layout_weight="1"/>

如果有人能提供帮助,那将不胜感激,谢谢!

将这些属性添加到 xml 中的 EditText 标记以禁用键盘弹出

android:editable="false" 

android:focusable="false"

更新:

android:editable="false" 现在已弃用。 使用 android:inputType="none" 代替或在代码中使用:

editText.setEnabled(false);

这对我在 androidx 项目上有用。创建 showTimePicker 方法。

    private void showTimePicker(){
        Calendar mcurrentTime = Calendar.getInstance();
        int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
        int minute = mcurrentTime.get(Calendar.MINUTE);
        TimePickerDialog timePickerDialog = new TimePickerDialog(EditPharmacyActivity.this, new TimePickerDialog.OnTimeSetListener() {

            @Override
            public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {

            }
        }, hour, minute, false);
        timePickerDialog.show();
    }

并在 onCreate 方法中添加以下内容以初始化视图。

        etOpenHours.setClickable(true);
        etOpenHours.setLongClickable(false);
        etOpenHours.setInputType(InputType.TYPE_NULL);

        etOpenHours.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               
                showTimePicker();
            }
        });