You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何同时为MaterialAlertDialogBuilder设置setAdapter与setMessage并正常显示?

解决MaterialAlertDialogBuilder同时显示正文与列表的问题

直接调用setMessage()和setAdapter()时,两者会互相覆盖对话框的内容区域,导致只能显示其中一个。要实现正文在列表上方的效果,需要自定义对话框布局,具体步骤如下:

1. 创建自定义布局文件

新建dialog_custom_layout.xml,按顺序放置正文文本和列表控件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp">

    <!-- 正文文本区域 -->
    <TextView
        android:id="@+id/dialog_message"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:layout_marginBottom="16dp"/>

    <!-- 列表区域 -->
    <ListView
        android:id="@+id/dialog_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

2. 代码中加载自定义布局并设置内容

通过setView()加载自定义布局,分别给文本和列表赋值:

MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(context);
// 可选:设置对话框标题
builder.setTitle("提示");

// 加载自定义布局
View customView = LayoutInflater.from(context).inflate(R.layout.dialog_custom_layout, null);
TextView messageTv = customView.findViewById(R.id.dialog_message);
ListView listView = customView.findViewById(R.id.dialog_list);

// 设置正文文本
messageTv.setText(R.string.ex1);
// 设置列表适配器与点击事件
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // 处理列表项点击逻辑
        dialog.dismiss();
    }
});

// 设置自定义视图并显示对话框
builder.setView(customView);
builder.setPositiveButton("确认", null);
AlertDialog dialog = builder.create();
dialog.show();

关键提示

  • 不要同时使用setMessage()和setAdapter(),二者会抢占对话框的内容显示区域
  • 自定义布局时注意保持和Material Design一致的内边距、文字大小,避免视觉风格脱节

内容的提问来源于stack exchange,提问作者haru_bleu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 08:43:22