Android应用中Microsoft App Center对话框按钮不可见问题咨询
解决App Center应用内更新对话框按钮不可见的问题
我之前也碰到过Material Components和Microsoft App Center 3.x版本对话框不兼容的情况——默认的非Material对话框被Material主题的全局样式覆盖,导致按钮文字和背景撞色,而且不仅初始的更新提示框,下载进度、下载完成的对话框都会出问题。以下是几个精准解决的方案:
方案一:自定义App Center全流程对话框样式(推荐)
这个方法可以单独为App Center的所有更新相关对话框设置独立样式,不会影响应用内其他对话框的样式。
1. 创建专属的对话框样式
在res/values/styles.xml中添加非Material风格的对话框及按钮样式:
<!-- App Center对话框基础样式 --> <style name="AppCenterDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert"> <!-- 可选:设置对话框背景 --> <item name="android:background">@color/white</item> <!-- 自定义按钮样式 --> <item name="buttonBarPositiveButtonStyle">@style/AppCenterPositiveButton</item> <item name="buttonBarNegativeButtonStyle">@style/AppCenterNegativeButton</item> </style> <!-- 确认按钮样式 --> <style name="AppCenterPositiveButton" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog"> <item name="android:textColor">@color/your_primary_accent_color</item> <item name="android:textSize">16sp</item> </style> <!-- 取消按钮样式 --> <style name="AppCenterNegativeButton" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog"> <item name="android:textColor">@color/your_secondary_text_color</item> <item name="android:textSize">16sp</item> </style>
2. 替换App Center的对话框提供者
在App Center初始化的代码中,实现UpdateDialogProvider接口,覆盖所有更新流程的对话框创建逻辑:
// 初始化App Center AppCenter.start(getApplication(), "你的App Secret", Distribute.class); // 自定义对话框提供者 Distribute.setUpdateDialogProvider(new UpdateDialogProvider() { // 自定义更新提示对话框 @Override public Dialog createUpdateDialog(Activity activity, ReleaseDetails releaseDetails, Runnable updateAction) { AlertDialog.Builder builder = new AlertDialog.Builder(activity, R.style.AppCenterDialogStyle); builder.setTitle("新版本可用") .setMessage(releaseDetails.getReleaseNotes()) .setPositiveButton("立即更新", (dialog, which) -> updateAction.run()) .setNegativeButton("稍后再说", null); return builder.create(); } // 自定义下载进度对话框 @Override public Dialog createDownloadProgressDialog(Activity activity) { // 可以用系统默认进度条,也可以自定义布局 ProgressBar progressBar = new ProgressBar(activity); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT ); params.gravity = Gravity.CENTER; progressBar.setLayoutParams(params); AlertDialog.Builder builder = new AlertDialog.Builder(activity, R.style.AppCenterDialogStyle); builder.setTitle("正在下载更新") .setView(progressBar) .setCancelable(false); return builder.create(); } // 自定义下载完成对话框 @Override public Dialog createDownloadCompleteDialog(Activity activity, Runnable installAction) { AlertDialog.Builder builder = new AlertDialog.Builder(activity, R.style.AppCenterDialogStyle); builder.setTitle("下载完成") .setMessage("更新包已准备好,点击安装即可升级") .setPositiveButton("立即安装", (dialog, which) -> installAction.run()) .setNegativeButton("稍后安装", null); return builder.create(); } });
这样整个更新流程的三个对话框都会使用你定义的样式,按钮文字和背景就不会再撞色了。
方案二:全局调整Material主题对AlertDialog的影响(谨慎使用)
如果你希望所有原生AlertDialog都使用非Material样式,可以在你的Material主题中覆盖alertDialogTheme属性:
<style name="YourAppMaterialTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar"> <!-- 其他主题配置 --> <item name="alertDialogTheme">@style/AppCenterDialogStyle</item> </style>
⚠️ 注意:这个方法会改变应用内所有原生AlertDialog的样式,如果你的其他功能依赖Material风格的对话框,不建议使用。
内容的提问来源于stack exchange,提问作者Janusz
相关产品推荐
相关产品推荐

