在自定义对话框中无法输入 EditText

Cannot type in EditText when it's in a custom dialog

我正在尝试从自定义对话框中获取一些数字作为用户输入。为此,我使用了 edittext。当单击 edittext 时,软键盘会正常弹出,但是当我尝试输入数字时,它不会在 edittext 中显示任何内容。只能输入小数点.

我也尝试过不将字符限制为数字,结果很奇怪,在这种情况下,我可以将所有字符键入 edittext,但 backspace 仅有效在非数字字符上,当我输入数字时 backspace 不会删除它们。此问题仅发生在对话框中,而不发生在 activitiesfragments 中。 我做错了什么?

另外我必须提到我使用的是英文键盘。

自定义对话框布局:

<?xml version="1.0" encoding="utf-8"?>

<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_centerInParent="true"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_gravity="center"
    android:layout_width="@dimen/_180sdp"
    android:layout_height="@dimen/_130sdp"
    android:theme="@style/Theme.Trading.main_background"
    app:cardCornerRadius="@dimen/_15sdp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:theme="@style/Theme.Trading.main_background">

        <ImageView
            android:layout_width="@dimen/_15sdp"
            android:layout_height="@dimen/_15sdp"
            android:background="@drawable/ic_up_down"
            android:backgroundTint="@color/gray_1"
            android:alpha="0.5"
            android:layout_marginTop="@dimen/_17sdp"
            android:layout_marginStart="@dimen/_27sdp"/>

        <RelativeLayout
            android:background="@drawable/border_spinner"
            android:layout_marginTop="@dimen/_15sdp"
            android:layout_marginStart="@dimen/_55sdp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <Spinner
                android:theme="@style/Theme.Trading.main_textview"
                android:spinnerMode="dropdown"
                android:backgroundTint="@color/purple_1"
                android:id="@+id/alarm_spinner"
                android:layout_width="@dimen/_90sdp"
                android:layout_height="@dimen/_20sdp" />



        </RelativeLayout>


        <ImageView
            android:layout_width="@dimen/_20sdp"
            android:layout_height="@dimen/_20sdp"
            android:background="@drawable/ic_money"
            android:backgroundTint="@color/gray_1"
            android:alpha="0.5"
            android:layout_marginTop="@dimen/_53sdp"
            android:layout_marginStart="@dimen/_25sdp"/>

        <EditText
            android:imeOptions="actionNext"
            android:textColor="@color/gray_1"
            android:inputType="numberDecimal"
            android:textSize="@dimen/_10sdp"
            android:layout_marginTop="@dimen/_48sdp"
            android:layout_marginStart="@dimen/_55sdp"
            android:layout_width="@dimen/_90sdp"
            android:layout_height="wrap_content"/>

        <ImageView
            android:layout_width="@dimen/_20sdp"
            android:layout_height="@dimen/_20sdp"
            android:background="@drawable/ic_symbol"
            android:backgroundTint="@color/gray_1"
            android:alpha="0.5"
            android:layout_marginTop="@dimen/_89sdp"
            android:layout_marginStart="@dimen/_25sdp"/>





    </RelativeLayout>

</androidx.cardview.widget.CardView>

我用下面的代码向用户展示这个对话框:

    public void showDialog(){
        final Dialog dialog = new Dialog(this);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCancelable(false);
        dialog.setContentView(R.layout.dialog_add_alarm);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));


        dialog.setOnKeyListener(new Dialog.OnKeyListener() {

            @Override
            public boolean onKey(DialogInterface arg0, int keyCode,
                                 KeyEvent event) {
                // TODO Auto-generated method stub
                if (keyCode == KeyEvent.KEYCODE_BACK) {
                    dialog.dismiss();
                }
                return true;
            }
        });

        dialog.show();

    }

您需要声明 EditText 并为其处理 onTextChanged 事件。

我期待看到这样的东西

customDialog_EditText = (EditText)dialog.findViewById(R.id.dialogedittext);

这是一个带有工作 EditText 的自定义对话框的一个很好的例子: https://www.edumobile.org/android/custom-dialog-with-edittext-in-android-development/

也许您需要此处概述的 TextWatcher:

您在对话方法中返回 true。这就是你的问题的原因。 使用下面的代码。

 public void showDialog(){
    final Dialog dialog = new Dialog(this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setCancelable(false);
    dialog.setContentView(R.layout.dialog_add_alarm);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
   

    dialog.setOnKeyListener(new Dialog.OnKeyListener() {

        @Override
        public boolean onKey(DialogInterface arg0, int keyCode,
                             KeyEvent event) {
            // TODO Auto-generated method stub
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                dialog.dismiss();
            }
            //just replace your return boolean to false. it will work
            return false;
        }
    });

    dialog.show();

}