【发布时间】:2020-02-26 18:12:20
【问题描述】:
我正在尝试使用 MaterialAlertDialogBuilder 创建一个 MaterialAlertDailog。 我设法控制了styles.xml 中对话框的大部分属性,除了消息和OK 按钮之间的空间。
我目前正在使用这个依赖:
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();
}
});
【问题讨论】:
-
问题可能出在 MaterialAlert.Body.Dark:
<item name="android:lines">5</item> -
你是对的!但现在我有一个不同的问题,我有几条消息(几个场景)有不同的行数。如果我将删除 lines 属性,我将只看到第一行。无论我有多少行,它都可以是 wrap_content 吗?
-
看Material Styles,我认为
<item name="android:layout_height">wrap_content</item>应该可以,但我从未尝试过。 -
我的样式中有那行 (MaterialAlert.Body.Dark),但似乎 textview 忽略了它,或者我的样式属性有问题
-
也许
<item name="android:singleLine">false</item>搞砸了?
标签: android material-design android-styles