我想在AlertDialog中的每个单选项目之间添加顶部和底部填充。我试图用这个style
资源来实现这个目标:
<style name="CustomDialog" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:listChoiceIndicatorSingle">@null</item>
<item name="android:background">@drawable/radio_button_background_selector</item>
<item name="android:paddingTop">17dp</item>
<item name="android:paddingBottom">17dp</item>
</style>
那么使用这个style
的Activity
代码就非常简单了:
AlertDialog.Builder(this, R.style.CustomDialog)
.setSingleChoiceItems(options, currentSelectedIndex) { dialog, index ->
if (index != currentSelectedIndex) {
// do something
}
dialog.dismiss()
}
.show()
除了在DialogFragment
的顶部和底部添加了巨大的边距之外,填充的工作方式与预期的一样。
如何在每个单选项目之间添加填充,而不会产生这种意外的结果?
发布于 2020-07-25 02:16:26
您正在覆盖整个Dialog
中的paddingTop
和paddingBottom
。
对于AppCompat
主题,您可以使用如下主题覆盖:
<style name="customLMultiItem" parent="@style/ThemeOverlay.AppCompat.Dialog.Alert">
<!-- if you want to remove the indicator in each row -->
<item name="android:listChoiceIndicatorSingle">@null</item>
<item name="alertDialogStyle">@style/my.AlertDialog</item>
</style>
<style name="my.AlertDialog" parent="AlertDialog.AppCompat">
<!-- to use a custom layout for the singlechoice -->
<item name="singleChoiceItemLayout">@layout/my_dialog_singlechoice</item>
</style>
通过这种方式,您可以使用自定义布局(从原始文件复制+填充):
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:paddingTop="XXdp"
android:paddingBottom="Xdp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/listPreferredItemHeightSmall"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?attr/textColorAlertDialogListItem"
android:gravity="center_vertical"
android:paddingLeft="@dimen/abc_select_dialog_padding_start_material"
android:paddingRight="?attr/dialogPreferredPadding"
android:paddingStart="@dimen/abc_select_dialog_padding_start_material"
android:paddingEnd="?attr/dialogPreferredPadding"
android:drawableLeft="?android:attr/listChoiceIndicatorSingle"
android:drawableStart="?android:attr/listChoiceIndicatorSingle"
android:drawablePadding="20dp"
android:ellipsize="marquee" />
那就用AlertDialog.Builder(this, R.style.customLMultiItem)
吧。
以MaterialComponents
为主题:
<style name="customLMultiItem" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog">
<item name="android:listChoiceIndicatorSingle">@null</item>
<item name="alertDialogStyle">@style/my.MaterialAlertDialog.MaterialComponents</item>
</style>
<style name="my.MaterialAlertDialog.MaterialComponents" parent="MaterialAlertDialog.MaterialComponents">
<item name="singleChoiceItemLayout">@layout/my_dialog_singlechoice</item>
</style>
https://stackoverflow.com/questions/63079023
复制相似问题