如何移除Android自定义对话框中的多余空白?附布局与实现代码
问题:如何移除AlertDialog对话框中出现的多余空白区域?

现有实现代码如下:
自定义布局XML代码
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_gravity="center_horizontal" android:padding="10dp"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioButton android:id="@+id/quality_dialog_2x_radio_btn_view_id" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/quality_dialog_2x_view_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="2X" android:textSize="16sp" android:textColor="#003FBC" android:padding="5dp"/> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioButton android:id="@+id/quality_dialog_1_5x_radio_btn_view_id" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/quality_dialog_1_5x_view_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1.5X" android:textSize="16sp" android:textColor="#003FBC" android:padding="5dp"/> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioButton android:id="@+id/quality_dialog_1_point_25_x_radio_btn_view_id" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/quality_dialog_1_point_25_x_view_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1.25X" android:textSize="16sp" android:textColor="#003FBC" android:padding="5dp"/> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioButton android:id="@+id/quality_dialog_normal_radio_btn_view_id" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/quality_dialog_normal_view_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Normal" android:textSize="16sp" android:textColor="#003FBC" android:padding="5dp"/> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioButton android:id="@+id/quality_dialog_normal_75x_radio_btn_view_id" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/quality_dialog_point_75x_view_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0.75X" android:textSize="16sp" android:textColor="#003FBC" android:padding="5dp"/> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioButton android:id="@+id/quality_dialog_5x_radio_btn_view_id" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/quality_dialog_point_5x_view_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0.5X" android:textSize="16sp" android:textColor="#003FBC" android:padding="5dp"/> </LinearLayout> </LinearLayout>
对话框逻辑Java代码
View alertLayout = View.inflate(this, R.layout.quality_dialog_layout, null); TextView quality2XView = alertLayout.findViewById(R.id.quality_dialog_2x_view_id); TextView quality1_5View = alertLayout.findViewById(R.id.quality_dialog_1_5x_view_id); TextView quality1_Point25View = alertLayout.findViewById(R.id.quality_dialog_1_point_25_x_view_id); TextView qualityNormalView = alertLayout.findViewById(R.id.quality_dialog_normal_view_id); quality_point75View = alertLayout.findViewById(R.id.quality_dialog_point_75x_view_id); quality_point5View = alertLayout.findViewById(R.id.quality_dialog_point_5x_view_id); quality2XRadioBtn = alertLayout.findViewById(R.id.quality_dialog_2x_radio_btn_view_id); quality1_5RadioBtn = alertLayout.findViewById(R.id.quality_dialog_1_5x_radio_btn_view_id); quality1_Point25RadioBtn = alertLayout.findViewById(R.id.quality_dialog_1_point_25_x_radio_btn_view_id); qualityNormalRadioBtn = alertLayout.findViewById(R.id.quality_dialog_normal_radio_btn_view_id); quality_point75RadioBtn = alertLayout.findViewById(R.id.quality_dialog_normal_75x_radio_btn_view_id); quality_point5RadioBtn = alertLayout.findViewById(R.id.quality_dialog_5x_radio_btn_view_id); AlertDialog.Builder alert = new AlertDialog.Builder(this); alert.setView(alertLayout); alert.setCancelable(true); qualityAlertDialog = alert.create(); qualityAlertDialog.show();
解决方法
多余空白主要来自系统默认的AlertDialog内容内边距,并非自定义布局本身导致的,按以下步骤处理即可:
- 在对话框
show()方法执行完成后,直接把对话框装饰视图的内边距清零,去掉系统自动添加的边距:qualityAlertDialog.show(); // 清除系统默认添加的对话框内边距 qualityAlertDialog.getWindow().getDecorView().setPadding(0, 0, 0, 0); - RadioButton控件自带系统默认的左右热区边距,如果仍有冗余空白,可以给每个RadioButton添加属性调整:
android:button="@null" android:drawableStart="@android:drawable/btn_radio" android:paddingStart="0dp" android:layout_marginEnd="5dp" - 长期复用可以自定义对话框样式,在
styles.xml中定义无内边距的对话框主题,创建对话框时直接传入主题参数,避免每次手动修改边距:
创建对话框时传入主题即可:<style name="NoPaddingAlertDialog" parent="ThemeOverlay.MaterialComponents.MaterialAlertDialog"> <item name="android:windowBackground">@android:color/transparent</item> <item name="dialogPreferredPadding">0dp</item> </style>AlertDialog.Builder alert = new AlertDialog.Builder(this, R.style.NoPaddingAlertDialog);
内容的提问来源于stack exchange,提问作者Bhaskar Jyoti Dutta
相关产品推荐
相关产品推荐

