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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:17:57