【问题标题】:Showing the MaterialDatePicker when clicking into the Material Outlined Text Field单击材料轮廓文本字段时显示 MaterialDatePicker
【发布时间】:2022-01-09 20:10:57
【问题描述】:

我正在开发一个用户可以启动活动的小应用程序。 通过这样做,文本输入将显示在默认设置今天日期的位置。

单击文本字段时,MaterialDatePicker 应显示为对话框。

我已成功实现 MaterialDatePicker 在单击按钮时显示,但我找不到显示对话框而不是 Android 标准 android 键盘的解决方案。

对此有何建议?

活动 XML:

<com.google.android.material.textfield.TextInputLayout
        android:id="@+id/edtStartWearLensDate"
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:hint="@string/txtLabelWearSelectStartDate"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/txtLabelStartWearLensID">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

活动:

创建时:

edtStartWearLensDate = findViewById(R.id.edtStartWearLensDate);
edtStartWearLensDate.setOnClickListener(view -> onEdtStartWearLensDateClick());

点击进入文本字段

private void onEdtStartWearLensDateClick() {
        showDatePickerDialog();
}

显示对话框的方法(在单击侦听器上从按钮调用时有效)

private void showDatePickerDialog(){
        MaterialDatePicker.Builder builder = MaterialDatePicker.Builder.datePicker();

        builder.setTitleText("Select start date");
        builder.setSelection(MaterialDatePicker.todayInUtcMilliseconds());

        final MaterialDatePicker materialDatePicker = builder.build();

        materialDatePicker.show(getSupportFragmentManager(), "DATE_PICKER");

        materialDatePicker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener() {
            @Override
            public void onPositiveButtonClick(Object selection) {
                edtStartWearLensDate.getEditText().setText(materialDatePicker.getHeaderText());
            }
        });
    }

【问题讨论】:

    标签: android datepicker android-edittext dialog material-components-android


    【解决方案1】:

    尝试在TextInputEditText 中将clickablefocusable 属性设置为true

    <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/text_input_edit_text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:focusable="false"
                android:clickable="true"/>
    

    然后调用 setOnClickListener 方法就可以了:

    findViewById<TextInputEditText>(R.id.text_input_edit_text).setOnClickListener(view -> onEdtStartWearLensDateClick())
    

    【讨论】:

    • 感谢您让我走上正轨!以下是诀窍:在 TextInputEditText 而不是 TextInputLayout 上调用 setOnClickListener 方法。将 TextInputEditText 的“focusable”设置为“false”,将“clickable”设置为“true”。
    猜你喜欢
    • 2020-12-23
    • 2021-03-27
    • 2020-05-04
    • 2014-06-13
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    相关资源
    最近更新 更多