I'm trying to get some numbers as user input from a custom dialog. I used an edittext
for this purpose. when edittext
is clicked the soft keyboard pops up normally, but when I'm trying to type numbers it won't show anything in edittext
. only the decimal point .
can be typed.
I've also tried this without limiting characters to numbers, and I've got a weird result, in this case, I can type all characters to edittext
, but backspace
only works on non-number characters, when I type numbers backspace
won't remove them. this problem only happens in the dialog and not in activities
or fragments
.
what am i doing wrong?
Also i have to mention that I'm using English keyboard.
custom dialog layout:
<?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>
and i show this dialog ti user with code below:
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();
}
CodePudding user response:
You are returning true in your dialogue method. That is the cause of your problem. Use below code.
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();
}
CodePudding user response:
You need to declare the EditText and handle the onTextChanged event for it.
I am expecting to see something like this
customDialog_EditText = (EditText)dialog.findViewById(R.id.dialogedittext);
Here is a good example of a custom dialog with a working EditText: https://www.edumobile.org/android/custom-dialog-with-edittext-in-android-development/
maybe you need a TextWatcher as outlined here: https://stackoverflow.com/a/11134227/15119767