使用setAdapter创建AlertDialog,如何设置内置ListView内边距使标题与列表对齐?
解决AlertDialog标题与ListView对齐问题
这个问题我之前也碰到过,确实用setAdapter()创建的AlertDialog很容易出现标题和列表内容不对齐的情况。其实核心思路就是拿到AlertDialog内部自动创建的ListView引用,然后给它设置和标题一致的内边距即可,具体步骤如下:
方法步骤
- 先正常创建ArrayAdapter和AlertDialog.Builder,完成基本配置后调用
create()生成Dialog实例(注意不要直接调用show(),因为要先修改ListView属性) - 通过Dialog的
listView属性获取内部的ListView实例(AlertDialog已经封装了这个方法,直接调用就行) - 获取系统默认的
dialogPreferredPadding内边距值,这个值就是标题使用的内边距大小 - 给ListView设置对应左右内边距,保持上下内边距不变,这样就能和标题完美对齐
完整代码示例
val dd = ArrayAdapter<String>(this, R.layout.myitem) dd.add("Internet") dd.add("Scratch") // 构建Dialog并创建实例 val dialog = AlertDialog.Builder(this) .setTitle("示例标题") // 设置标题 .setAdapter(dd) { dialogInterface, position -> // 列表项点击事件处理 when(position) { 0 -> // 处理Internet选项的逻辑 1 -> // 处理Scratch选项的逻辑 } dialogInterface.dismiss() } .create() // 获取内部ListView并设置内边距 dialog.listView?.apply { // 获取系统默认的dialog内边距 val padding = resources.getDimensionPixelSize(com.android.internal.R.dimen.dialogPreferredPadding) // 设置左右内边距与标题一致,上下内边距保留默认 setPadding(padding, paddingTop, padding, paddingBottom) } // 最后显示Dialog dialog.show()
补充说明
- 为什么不用手动创建ListView?因为AlertDialog的
setAdapter()内部已经帮我们创建了ListView,直接通过dialog.listView就能拿到引用,不需要额外自定义布局 - 如果你的自定义列表项布局(
R.layout.myitem)本身带有内边距,可能需要调整布局内的padding,避免整体内边距过大 - 这个方法适配大多数Android版本,因为
dialogPreferredPadding是系统内置的维度资源,不同版本的系统会自动适配合适的间距大小
内容的提问来源于stack exchange,提问作者Damn Vegetables
相关产品推荐
相关产品推荐

