Я пытаюсь получить некоторые числа в качестве пользовательского ввода из пользовательского диалогового окна. Я использовал 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();
}
Вам нужно объявить 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();
}