我正在尝试使用MaterialAlertDialogBuilder创建MaterialAlertDailog。我设法在styles.xml中控制对话框的大多数属性,但消息和“确定”按钮之间的空间除外。
我目前正在使用此依赖项:
implementation "com.google.android.material:material:1.1.0"
styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="@style/Theme.MaterialComponents.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="MaterialDialogDark" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog">
<!-- Customize your theme here. -->
<item name="colorSurface">@color/material_dialog_background_color_dark</item>
<item name="buttonBarPositiveButtonStyle">@style/MaterialAlert.Button.Dark</item>
<item name="buttonBarNegativeButtonStyle">@style/MaterialAlert.Button.Dark</item>
<item name="materialAlertDialogBodyTextStyle">@style/MaterialAlert.Body.Dark</item>
<item name="materialAlertDialogTitleTextStyle">@style/MaterialAlert.Title.Dark</item>
<item name="materialAlertDialogTitlePanelStyle">@style/MaterialAlert.Panel</item>
</style>
<style name="MaterialAlert.Panel" parent="MaterialAlertDialog.MaterialComponents.Title.Panel">
<item name="android:layout_height">90dp</item>
</style>
<style name="MaterialAlert.Button.Dark" parent="Widget.MaterialComponents.Button.TextButton">
<item name="android:textColor">@color/material_dialog_btn_color</item>
<item name="android:textSize">16sp</item>
<item name="android:textAllCaps">false</item>
</style>
<style name="MaterialAlert.Body.Dark" parent="MaterialAlertDialog.MaterialComponents.Title.Text">
<item name="android:textSize">16sp</item>
<item name="android:textColor">@color/material_dialog_body_color</item>
<item name="android:singleLine">false</item>
<item name="android:lines">5</item>
<item name="android:lineSpacingMultiplier">1.1</item>
<item name="android:paddingTop">10dp</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:minHeight">20dp</item>
<item name="android:paddingBottom">0dp</item>
<item name="android:ellipsize">none</item>
</style>
<style name="MaterialAlert.Title.Dark" parent="MaterialAlertDialog.MaterialComponents.Title.Text">
<item name="android:textSize">20sp</item>
<item name="android:textStyle">bold</item>
<item name="android:textColor">@color/material_dialog_title_color_dark</item>
</style>
</resources>
MainActivity.java
findViewById(R.id.testDialog).setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
new MaterialAlertDialogBuilder(MainActivity.this ,R.style.MaterialDialogDark)
.setTitle(R.string.label_title)
.setMessage(R.string.label_not_enough_points)
.setPositiveButton(android.R.string.ok,(dialogInterface, i) -> {})
.show();
}
});
我意识到没有简单的解决方法(至少是通过styles.xml来解决的)。最后,我创建了一个自定义布局(仅具有textview),然后按预期的方式工作。
custom_text.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:textSize="18sp"
android:textColor="@color/material_dialog_body_color"
android:paddingTop="15dp"
android:paddingBottom="15dp"
android:paddingLeft="23dp"
android:paddingRight="23dp"/>
活动
findViewById(R.id.testDialog).setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
AlertDialog dialog = new MaterialAlertDialogBuilder(MainActivity.this ,R.style.MaterialDialogDark)
.setTitle(R.string.label_title)
// .setMessage(R.string.label_mark_used_sure)
.setView(R.layout.material_text_alet_dialog)
.setPositiveButton(R.string.label_yes,(dialogInterface, i) -> {
Toast.makeText(MainActivity.this, "Positive", Toast.LENGTH_LONG).show();
})
.setNegativeButton(R.string.label_no,(dialogInterface, i) -> {
Toast.makeText(MainActivity.this, "Negative", Toast.LENGTH_LONG).show();
}).show();
TextView msgText = dialog.findViewById(R.id.message);
msgText.setText(getString(R.string.not_authorized));
}
});