#android #android-studio #android-alertdialog
#Android #android-studio #android-alertdialog
Вопрос:
В Android Studio мне нужно деактивировать положительную кнопку (OK) AlertDialog
до тех пор, пока пользователь не введет EditText
.
Ответ №1:
Просто создайте пользовательский диалог оповещения, затем примените свою логику.
LayoutInflater layoutInflaterAndroid = LayoutInflater.from(context);
View mView = layoutInflaterAndroid.inflate(R.layout.your_dialog_xml, null);
AlertDialog.Builder alertDialogBuilderUserInput = new AlertDialog.Builder(context);
alertDialogBuilderUserInput.setView(mView);
alertDialogBuilderUserInput.setCancelable(false);
final AlertDialog alertDialogAndroid = alertDialogBuilderUserInput.create();
final TextView tv_title = mView.findViewById(R.id.tv_title);
final EditText et_message = mView.findViewById(R.id.et_message);
final Button bt_ok = mView.findViewById(R.id.bt_ok);
final Button bt_cancel = mView.findViewById(R.id.bt_cancel);
tv_message.setText(message);
bt_ok.setText(ok_text);
bt_cancel.setText(cancel_text);
// set on text change listener and enable buttons as per your choice
et_message.set....
bt_ok.setOnClickListener(view -> {
alertDialogAndroid.cancel();
if (callback != null) callback.onSubmit("");
});
bt_cancel.setOnClickListener(view -> {
alertDialogAndroid.cancel();
if (callback != null) callback.onCancel();
});
alertDialogAndroid.show();
Ответ №2:
попробуйте этот код, надеюсь, он вам поможет
bt_ok.setenable(false);
и включите его при изменении текста
bt_ok.setenable(true);
Комментарии:
1. Работал с очарованием 🙂
Ответ №3:
Прежде всего, вы должны создать пользовательский диалог оповещения в папке макета.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@ id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:layout_margin="10dp"
android:textSize="15sp"
android:hint="@string/hint"
android:inputType="textCapWords"
android:singleLine="true"
android:layout_marginTop="10dp"
android:background="@null"
android:maxLines="1"
android:scrollbars="vertical"
android:importantForAutofill="no" />
</LinearLayout>
Затем увеличьте размер макета для приведенного выше текста редактирования, чтобы наш диалог оповещения мог отображать и получать текст, написанный внутри.
LayoutInflater layoutInflater= this.getLayoutInflater();
final View view = layoutInflater.inflate(R.layout.dialog, null);
EditText editText = view.findViewById(R.id.edit_text);
После этого нам нужно создать диалоговое окно оповещения. Здесь необходимо указать текст редактирования с setView()
помощью функции, передав созданное нами окончательное представление. Поскольку у вас нет кнопки отмены, нам не нужно звонить builder.setCancelable(false)
сюда.
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(view);
builder.setPositiveButton("OK", (dialogInterface, i) -> {
//Whatever you would like to do after pressing the OK button.
});
AlertDialog dialog = builder.create();
dialog.show();
Чтобы получить кнопку OK, нам нужно вызвать функцию диалога getButton()
. Помните, что вам нужно позвонить setEnabled(false)
, чтобы он был отключен по умолчанию.
Button button = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
button.setEnabled(false);
Последний шаг — добавить текстовый наблюдатель к редактируемому тексту, чтобы мы могли получать информацию, когда что-либо вводится.
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (editText.getText().length() > 0){
button.setEnabled(true);
}else{
button.setEnabled(false);
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
Конечный код в функции должен выглядеть следующим образом:
public void getAlertDialog() {
LayoutInflater layoutInflater= this.getLayoutInflater();
final View view = layoutInflater.inflate(R.layout.dialog, null);
EditText editText = view.findViewById(R.id.edit_text);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(view);
builder.setPositiveButton("OK", (dialogInterface, i) -> {
//Whatever you would like to do after pressing the OK button.
});
AlertDialog dialog = builder.create();
dialog.show();
Button button = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
button.setEnabled(false);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (editText.getText().length() > 0){
button.setEnabled(true);
}else{
button.setEnabled(false);
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}