草庐IT

Android Dialog 主题使图标太轻

coder 2023-06-05 原文

我在 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();    
            }

结果对话框是:

为什么 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() {

现在对话框如下所示:

最佳答案

问题是您使用的是私有(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/

有关Android Dialog 主题使图标太轻的更多相关文章

  1. css - Rails 4.1 和 Bootstrap 3 字形图标不工作 - 2

    我正在尝试消除使用Bootstrap3的Rails4元素中的glyphicon错误。我没有使用任何Bootstrapgem将其添加到Assets管道中。我手动将bootstrap.css和bootstrap.js添加到各自的app/assets目录下,分别添加到application.css和application.js什么的我现在在网络浏览器的控制台中看到以下内容:GEThttp://localhost:3000/fonts/glyphicons-halflings-regular.woff404(NotFound)localhost/:1GEThttp://localhost:30

  2. ruby-on-rails - 在暂存环境中覆盖 ActionMailer 主题 - 2

    我希望从我们的登台服务器发送的所有电子邮件的主题中都带有“[STAGING]”字样。在Rails3.2中使用ActionMailer是否有一种优雅的方式来做到这一点? 最佳答案 这是我使用ActionMailerInterceptor找到的一个优雅的解决方案基于anexistinganswer.#config/initializers/change_staging_email_subject.rbifRails.env.staging?classChangeStagingEmailSubjectdefself.delivering_

  3. ruby-on-rails - 如何检索网站图标? - 2

    我正在使用RubyonRailsv3.0.9,我想检索我设置了链接的每个网站的favicon.ico图像。也就是说,如果在我的应用程序中我设置了http://www.facebook.com/URL,我想检索Facebook的图标并在我的网页中使用\插入它。当然,我也想为所有其他网站这样做。如何以“自动”方式从网站检索favicon.ico图标(“自动”是指在网站中搜索图标并获取它的链接-我认为不是,因为并非所有网站都有一个名为“favicon.ico”的图标。我想以“自动”方式识别它)?P.S.:我想做的是像Facebook在您的Facebook页面中添加链接\URL时所做的那样:它

  4. ruby-on-rails - 将 Bootstrap 图标添加到 Ruby on Rails 中的按钮 - 2

    我想在RubyonRails中为按钮添加图标。目前我尝试了以下方法:"),{:controller=>'events',:action=>"upvoteEvent",:method=>"put",:id=>@event.id,:uid=>current_user.id},{:class=>"btnbtn-success"}%>生成以下html:"/>我遵循了此处发布的解决方案:https://stackoverflow.com/a/10468935/1385324,但这对我不起作用。我还测试了BootstrapCSS是否正常工作,只需在网站的其他任何地方插入一个图标即可。感谢您的帮助!

  5. ruby - 如何检查我的主题是否引发异常? - 2

    我目前正在subject中创建一个对象,需要测试这是否会引发异常。以下代码说明了我要实现的目标:describeMyClassdodescribe'#initialize'dosubject{MyClass.new}it{is_expected.not_toraise_error(Some::Error)}endend我有一种感觉,我正在以错误的方式处理这件事。将subject设置为新对象而不创建对象两次的首选方法是什么?更新我的问题有两个。首先,这种语法不起作用:it{is_expected.not_toraise_error}但是,在itblock中使用expect确实如此(正如J

  6. kafka如何动态消费新增topic主题 - 2

    一、解决痛点使用spring-kafka客户端,每次新增topic主题,都需要硬编码客户端并重新发布服务,操作麻烦耗时长。kafkaListener虽可以支持通配符消费topic,缺点是并发数需要手动改并且重启服务。对于业务逻辑相似场景,创建新主题动态监听可以用kafka-batch-starter组件二、组件能力1、新增topic名称为:auto.topic1(由于配置spring.kafka.consumer.prefix为auto,因此只有auto前缀的topic,才会被组件动态监听。)2、应用输出日志,监听到新增auto.topic1,并初始化客户端(主题刷新间隔为10s)3、发新的消

  7. ruby - OS X 中作为守护进程运行的脚本的菜单栏图标? - 2

    我有一个ruby​​脚本(https://github.com/daemonza/MacBak)作为守护进程在我的macbook上运行并监视一堆目录的文件更改和rsync发生的任何更改。我想知道我能否让它在顶部的菜单栏中创建一个图标?只是为了让我知道它确实在运行,而不必使用ps检查它。也许以后如果需要的话,我可能希望能够从那里控制脚本,简单的带有停止和状态条目的下拉菜单等。从ObjectC看来我可以调用NSStatusItem来获取图标,但我真的只是想通过我的Ruby脚本轻松地完成它。也许我可以做一些applescript调用? 最佳答案

  8. ruby - 使用适用于 Ruby 的 AWS 开发工具包发布到 SNS 主题时指定区域 - 2

    我正在使用适用于Ruby的AWS开发工具包向Rails3应用程序发布消息和AWSSNS主题,如下所示:sns=AWS::SNS.newtopic=sns.topics['arn:aws:sns:eu-west-1:55555555555:my_topic']topic.publish("MESSAGE",:subject=>"SUBJECT")当我发布到“us-east-1”中的主题时,它按预期工作,但发布到“eu-west-1”区域中的主题时不起作用:AWS::SNS::Errors::InvalidParameter-Invalidparameter:TopicArn:使用AWSS

  9. ruby-on-rails - 如何处理 UTF-8 电子邮件 header (如主题 :) using Ruby? - 2

    我是一个电子邮件n00b,但我正在开发一个发送带有Unicode字符的HTML电子邮件的应用程序(正如我friend所说的“享受编码hell”)。Subject:header来自用户输入,因此可能包含Unicode字符。一些邮件客户端(如GMail和Outlook2007)对此没有问题,但从我的阅读来看,执行此操作的正确方法似乎是使用MIMEEncoded-Wordencoding对于标题。我找不到Ruby库来执行此操作。有吗?此外,是否有要添加的header告诉邮件客户端在显示消息时使用UTF-8?我们要发送多部分电子邮件,所以我们的Content-Type是multipart/mi

  10. ruby-on-rails - 如何在 Ajax 请求处理期间显示动画图标 - Rails 3 - 2

    我正在尝试为每个ajax请求显示一个加载指示器,我在Rails3应用程序中工作。HTML:"loading-indicator",:style=>"display:none")%>CSS:#loading-indicator{position:absolute;left:10px;top:10px;}loading.js:我放在assest/javascripts/$(document).ready(function(){$(document).ajaxSend(function(event,request,settings){$('#loading-indicator').show(

随机推荐