我对这个特定对话框有问题,我将其实现为一个选项,可以在工具栏的“选项”菜单中显示,但是当我单击该选项时,它不显示对话框的内容。我已经用我实现的其他对话框布局尝试了这些,当我在这里实现它们时它们都可以工作,所以我直觉问题出在XML布局上,但是我似乎找不到问题。
代码:
else if(id == R.id.action_setting)
{
Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.dialog_settings);
dialog.setTitle("Settings");
CheckBox set_splash = dialog.findViewById(R.id.setting_check);
boolean have_splash =pref.getBoolean(SplashActivity.HAVE_SPLASH,false);
if(have_splash)
set_splash.setChecked(true);
else
set_splash.setChecked(false);
ImageButton confirm_btn = dialog.findViewById(R.id.setting_confirm);
ImageButton cancel_btn = dialog.findViewById(R.id.setting_cancel);
confirm_btn.setOnClickListener(v -> {
boolean new_splash = set_splash.isChecked();
edit.putBoolean(SplashActivity.HAVE_SPLASH,new_splash);
edit.commit();
dialog.dismiss();
});
cancel_btn.setOnClickListener(v -> dialog.dismiss());
dialog.show();
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout5">
<ImageButton
android:id="@+id/setting_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/button_highlight_dark"
android:paddingVertical="20dp"
app:srcCompat="@drawable/ic_confirm" />
<ImageButton
android:id="@+id/setting_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/button_highlight_dark"
android:paddingVertical="20dp"
app:srcCompat="@drawable/ic_cancel" />
</LinearLayout>
<TextView
android:id="@+id/setting_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/themeDark"
android:paddingVertical="10dp"
android:paddingLeft="10dp"
android:text="@string/settings"
android:textColor="@color/white"
android:textSize="10pt"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/linearLayout5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@color/themeLight"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/setting_text">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="6"
android:textColor="@color/white"
android:paddingVertical="20dp"
android:paddingLeft="10dp"
android:text="@string/splash_setting"
android:textSize="10pt" />
<CheckBox
android:id="@+id/setting_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
答案 0 :(得分:0)
对话框中的match_parent
参数将被忽略。因此,对话框的宽度为0。
获得正确的高度和宽度的最简单方法是使用AlertDialog.Builder
。
如果自定义的AlertDialog
不够,您可以按照以下答案将对话框放大:
Android get full width for custom Dialog
Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.dialog_settings);
Window window = dialog.getWindow();
window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);