gpt4 book ai didi

android - 通过 GoogleApiAvailability.showErrorDialogFragment 独立于 Activity 呈现的样式对话框

转载 作者:搜寻专家 更新时间:2023-11-01 07:48:00 25 4
gpt4 key购买 nike

背景

我有一个应用了以下主题的 Activity:

<style name="BlueTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/light_blue</item>
<item name="colorPrimaryDark">@color/dark_blue</item>
<item name="colorAccent">@color/mid_blue</item>
<item name="android:textColor">@color/white</item>
<item name="android:windowBackground">@color/light_blue</item>
<item name="dialogTheme">@style/BaseDialog</item>
<item name="alertDialogTheme">@style/BaseDialog</item>
...
</style>

其中对话框主题定义如下:

<style name="BaseDialog" parent="Theme.AppCompat.Dialog.Alert">
<item name="colorAccent">@color/light_blue</item>
<item name="android:textColor">@color/black</item>
<item name="android:textColorPrimary">@color/gray</item>
<item name="android:background">@color/white</item>
</style>

此屏幕的大部分内容显示为全蓝色背景上的白色文本。

Activity 尝试通过调用 ProviderInstaller.installIfNeededAsync(this, this); 来更新设备安全提供程序.如果失败,我将使用以下代码显示一个对话框:

@Override
public void onProviderInstallFailed(final int errorCode, final Intent recoveryIntent) {
final GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance();

if (googleApiAvailability.isUserResolvableError(errorCode)) {
googleApiAvailability.showErrorDialogFragment(
this,
errorCode,
ERROR_RESOLUTION_REQUEST_CODE);
}
}

下面是一个失败示例的对话框:

enter image description here

这是一个问题。对话框标题为白色,因此在对话框背景中不可见。请注意,在其他屏幕上手动显示的支持警报对话框根据 BaseDialog 样式正确着色。

目前的研究

通过调用 googleApiAvailability.showErrorDialogFragment 呈现的 Dialog 是使用 android.app.AlertDialog.Builder 的实例构造的,而不是 android.support.v7.app.AlertDialog.Builder。鉴于此,我相信平台对话框的颜色将按如下方式填充:

  • 来自 BlueTheme.android:textcolor 的标题
  • 来自BlueTheme.android:primaryTextColor的消息
  • 按钮来自 BlueTheme.colorAccent

使用 BlueTheme.dialogThemeBlueTheme.alertDialogTheme 中的值填充。

我一直在考虑以下选项来解决此问题:

  1. 手动显示支持提醒对话框。这种方法的缺点:无法检索内置对话框将使用的自定义每个错误代码标题/消息(据我所知);
  2. BlueTheme 中的 android:textColorandroid:textColorPrimarycolorAccent 设置为获得正确着色的对话框,然后在 XML 布局文件中覆盖每个小部件的这些颜色。这种方法的缺点:丑陋,需要大量重写;

看起来都不太好。我还使用 ContextThemeWrapper 进行了简要调查(不行,showErrorDialogFragment 方法需要一个 Activity 实例)并寻找一种方法来请求 Google使用支持 AlertDialog 构建器(未找到)构建播放服务对话框。

问题

我是否缺少一种更明显的方法来设置此对话框的样式?

最佳答案

    GoogleApiAvailability googleAPI = GoogleApiAvailability.getInstance();
int googlePlayServicesAvailableError = googleAPI.isGooglePlayServicesAvailable(this);
Intent errorResolutionIntent = googleAPI.getErrorResolutionIntent(this, googlePlayServicesAvailableError, null);

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.DialogTheme);
builder.setTitle("Title");
builder.setMessage(ConnectionErrorMessages.getErrorMessage(this, googlePlayServicesAvailableError));
builder.setPositiveButton(ConnectionErrorMessages.getErrorDialogButtonMessage(this, googlePlayServicesAvailableError), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivityForResult(errorResolutionIntent, REQUEST_GOOGLE_PLAY_SERVICES);
}
});
builder.setCancelable(false);

if (!isFinishing()) {
builder.show();
}

关于android - 通过 GoogleApiAvailability.showErrorDialogFragment 独立于 Activity 呈现的样式对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39842360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com