Невозможно ввести EditText, когда он находится в пользовательском диалоговом окне

Я пытаюсь получить некоторые числа в качестве пользовательского ввода из пользовательского диалогового окна. Я использовал edittext для этой цели. при нажатии edittext программная клавиатура появляется нормально, но когда я пытаюсь ввести цифры, она ничего не показывает в edittext. можно ввести только десятичную точку ..

Я также пробовал это, не ограничивая символы числами, и получил странный результат, в этом случае я могу ввести все символы в edittext, но backspace работает только с нечисловыми символами, когда я набираю числа backspace выиграл' т удалить их. эта проблема возникает только в диалоговом окне, а не в activities или fragments. Что я делаю не так?

Также я должен упомянуть, что я использую английскую клавиатуру.

настраиваемый макет диалога:

<?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();

    }
0
0
31
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно объявить EditText и обработать для него событие onTextChanged.

Я ожидаю увидеть что-то подобное

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

Вот хороший пример пользовательского диалога с работающим EditText: https://www.edumobile.org/android/custom-dialog-with-edittext-in-android-development/

возможно, вам нужен TextWatcher, как описано здесь: https://stackoverflow.com/a/11134227/15119767

Ответ принят как подходящий

Вы возвращаете истинный в методе диалога. Это причина вашей проблемы. Используйте приведенный ниже код.

 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();

}

Другие вопросы по теме