如何增大通过setSingleChoiceItems创建的Material AlertDialog单选项文字尺寸?
解决AlertDialog单选列表项文字尺寸增大问题
你之前的样式配置未生效,原因是materialAlertDialogBodyTextStyle仅作用于对话框的正文文本(比如setMessage()设置的内容),而setSingleChoiceItems()生成的单选列表项需要单独配置样式。
方法一:通过主题样式直接配置
在你的AppDialog主题中添加针对列表项文本的样式配置:
<!-- AlertDialog theme on both light and night mode --> <style name="AppDialog" parent="ThemeOverlay.Material3.MaterialAlertDialog" tools:keep="@style/AppDialog"> <!-- 保留你已有的其他属性 --> <item name="buttonBarPositiveButtonStyle">@style/DialogButtonStyle</item> <item name="buttonBarNegativeButtonStyle">@style/DialogButtonStyle</item> <item name="materialAlertDialogBodyTextStyle">@style/AppDialog.Body</item> <item name="alertDialogStyle">@style/MaterialAlertDialog.App</item> <!-- 添加单选列表项文本样式 --> <item name="materialAlertDialogListTextStyle">@style/AppDialog.ListItemText</item> </style> <!-- 定义单选列表项的文本样式 --> <style name="AppDialog.ListItemText" parent="TextAppearance.Material3.Subtitle1"> <item name="android:textSize">18sp</item> <!-- 替换为你需要的字号 --> <!-- 可额外添加文本颜色等属性 --> <item name="android:textColor">@color/your_color</item> </style>
方法二:自定义列表项布局(更灵活)
如果需要对列表项做更多自定义(比如调整内边距、单选框样式),可以创建自定义布局文件radio_list_item.xml:
<?xml version="1.0" encoding="utf-8"?> <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?attr/listPreferredItemHeightSmall" android:textSize="18sp" <!-- 设置目标字号 --> android:textColor="?attr/colorOnSurface" android:gravity="center_vertical" android:paddingHorizontal="16dp" android:paddingVertical="12dp" android:checkMark="?attr/listChoiceIndicatorSingle" />
然后在创建AlertDialog时,替换默认的列表项布局:
String[] items = {"选项1", "选项2", "选项3"}; AlertDialog dialog = new AlertDialog.Builder(this, R.style.AppDialog) .setSingleChoiceItems(items, 0, null) .setPositiveButton("确定", (dialogInterface, i) -> dialogInterface.dismiss()) .setNegativeButton("取消", (dialogInterface, i) -> dialogInterface.dismiss()) .create(); // 获取列表视图并替换适配器 ListView listView = dialog.getListView(); listView.setAdapter(new ArrayAdapter<>(this, R.layout.radio_list_item, items)); dialog.show();
两种方法都能生效,根据你的需求选择即可。
内容的提问来源于stack exchange,提问作者Bitwise DEVS
相关产品推荐
相关产品推荐

