gpt4 book ai didi

Android Dialog 主题使图标太轻

转载 作者:IT王子 更新时间:2023-10-28 23:50:37 26 4
gpt4 key购买 nike

我在 Eclipse 中创建了一个针对 Jelly Bean 的新应用程序。这都是自动创建的代码。 list 将应用程序主题设置为 AppName:

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
. . .

将值目录中的样式转换为 AppBaseTheme:

<resources xmlns:android="http://schemas.android.com/apk/res/android">

<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Light">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

</resources>

而 values-v14/styles.xml 是:

<resources>

<!--
Base application theme for API 14+. This theme completely replaces
AppBaseTheme from BOTH res/values/styles.xml and
res/values-v11/styles.xml on API 14+ devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- API 14 theme customizations can go here. -->
</style>

</resources>

然后我在退出前创建了一个确认对话框:

    case R.id.menu_quit:
new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle(R.string.confirm_title)
.setMessage(R.string.confirm_text)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}

结果对话框是:

resulting dialog box

为什么 ic_dialog_icon 这么轻?它几乎看不见。我使用所有默认值,我没有修改主题或任何颜色,系统不应该选择一个与其背景有更多对比的图标吗?我该如何解决?

使用修复编辑
根据 Tomik 信息,我阅读了 android.R.attr.alertDialogIcon 的文档并进行了修复(将 setIcon() 替换为 setIconAttribute() )

        new AlertDialog.Builder(this)
.setIconAttribute(android.R.attr.alertDialogIcon)
.setTitle(R.string.confirm_title)
.setMessage(R.string.confirm_text)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {

现在对话框如下所示:

enter image description here

最佳答案

问题是您使用的是私有(private)资源 android.R.drawable.ic_dialog_alert

使用私有(private)资源是有问题的,它们可能在不同的设备上有所不同,您甚至无法确定它们是否存在于所有设备上。最好的办法是避免使用私有(private)资源。如果您需要它们,您应该从 Android 源中复制它们并将它们放入项目的资源中。

您的资源太白的确切原因是您正在使用用于标准(非 Holo)主题的资源(android.R.drawable.ic_dialog_alert)。
但是对于运行 Android 4.x(API 级别 14)的设备,您使用的是通常使用不同资源的 Holo 主题 (android:Theme.Holo.Light.DarkActionBar)。

对于 Holo 主题,默认警报图标是 android.R.id.ic_dialog_alert_holo_dark 用于深色主题或 android.R.id.ic_dialog_alert_holo_light 用于浅色主题(您的在这种情况下,您应该改用此资源)。

注意:由于 API 级别 11,有一个属性 android.R.attr.alertDialogIcon 引用当前主题的默认警报对话框图标。在您的代码中,您可以这样使用它:

case R.id.menu_quit:
new AlertDialog.Builder(this)
.setIconAttribute(android.R.attr.alertDialogIcon)
.setTitle(R.string.confirm_title)
.setMessage(R.string.confirm_text)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}

我仍然建议将资源从 Android 源复制到项目的资源中,因为这是确保图标始终看起来相同的唯一方法。

关于Android Dialog 主题使图标太轻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14910536/

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