在自定义对话框中无法输入 EditText
Cannot type in EditText when it's in a custom dialog
我正在尝试从自定义对话框中获取一些数字作为用户输入。为此,我使用了 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:
您在对话方法中返回 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();
}
我正在尝试从自定义对话框中获取一些数字作为用户输入。为此,我使用了 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:
您在对话方法中返回 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();
}