Android开发自定义AlertDialog设置背景色不生效问题咨询
问题描述
我尝试将对话框的背景色从白色修改为深蓝色,但长按网格项弹出对话框时,实际显示效果如下:
我期望实现的效果如下(为Photoshop制作的参考效果图):
现有实现代码
对话框XML布局片段
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" android:background="@color/customBG">
对话框Java逻辑代码
@Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = getActivity().getLayoutInflater(); View view = inflater.inflate(R.layout.edit_game_dialog,null); editTitle = view.findViewById(R.id.editTitle); editTitle.setText(currentTitle); imageView = view.findViewById(R.id.item_image_dialog); imageView.setImageResource(currentImage); changeImageBt = view.findViewById(R.id.change_image); changeImageBt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } }); builder.setView(view).setTitle("Edit game") .setPositiveButton("Apply Changes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { String title = editTitle.getText().toString(); int image = R.drawable.blank; //PLACE HOLDER CODE editGameDialogListener.applyChanges(pos,title,image); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { } }); return builder.create(); }
存在问题
我已在布局根节点设置了自定义深蓝色背景@color/customBG,但弹出的对话框仍存在默认白色背景区域,无法达到预期的全深蓝色效果。
解决方案
白边出现的原因是你仅给自定义的内容布局设置了深蓝色背景,AlertDialog本身自带的窗口容器、标题区、按钮区默认使用白色主题背景,没有被覆盖。按以下步骤修改即可实现全深蓝色效果:
- 第一步:给对话框指定自定义主题,替换默认白色窗口样式
将原有创建Builder的代码:
替换为:AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
在项目AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.CustomAlertDialog);res/values/styles.xml文件中添加对应的自定义样式:<style name="CustomAlertDialog" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="android:windowBackground">@android:color/transparent</item> <!-- 深色背景下建议将文字、按钮高亮色设为白色,避免内容看不清 --> <item name="android:textColorPrimary">@color/white</item> <item name="colorAccent">@color/white</item> </style> - 第二步:清除窗口默认背景,彻底去除白边
将原有代码末尾的return builder.create();替换为:AlertDialog alertDialog = builder.create(); alertDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); return alertDialog;
如果你项目使用的是Material组件库,只需将上述样式的parent属性改为Theme.MaterialComponents.Light.Dialog.Alert,其余配置无需调整。
内容的提问来源于stack exchange,提问作者Pedro Malavet
相关产品推荐
相关产品推荐

