【问题标题】:Grey buttons when adding actions to notifications in Jelly Bean向 Jelly Bean 中的通知添加操作时的灰色按钮
【发布时间】:2012-08-26 20:44:33
【问题描述】:

我正在向我的应用程序中设置为 API 级别 8 的通知添加两个按钮。问题是这两个按钮显示为两个大的灰色按钮,与其余通知完全不合适。我已经在 Nexus 7 和 Galaxy Nexus 上对其进行了测试。

我见过的所有示例都有漂亮的黑色按钮,例如来电通知: http://www.androidng.com/wp-content/uploads/2012/07/android-jelly-bean-notifications.jpeg

我想这很容易,但今天没有这样的运气。有谁知道我可能在哪里走错了路?下面是我的代码的 sn-p,它使用最新的支持库生成通知。

NotificationManager nm = (NotificationManager) this
            .getSystemService(Context.NOTIFICATION_SERVICE);
android.support.v4.app.NotificationCompat.Builder builder = new android.support.v4.app.NotificationCompat.Builder(this);
    builder.setContentIntent(contentIntent)
                .setSmallIcon(R.drawable.ic_stat_radio)                
                .setContentTitle(message)
                .setTicker(message) 
                .setPriority(android.support.v4.app.NotificationCompat.PRIORITY_HIGH)
                .setWhen(System.currentTimeMillis())
                .setAutoCancel(false)                   
                .addAction(android.R.drawable.ic_btn_speak_now, "Play", contentIntent)
                .addAction(android.R.drawable.ic_dialog_map, "Stop", contentIntent)
                .setContentText(message);

    Notification n = builder.build();

    //nm.notify(0, n);
    startForeground(1, n);

【问题讨论】:

  • 你试过用 Notification.Builder 代替 NotificationCompat.Builder
  • 是的,仍然存在 :-( 自 Android 1.1 以来我遇到的最奇怪的问题...
  • 看起来正在使用 Holo.Light 主题。您能否尝试强制使用 Holo.Dark 主题,或者至少在您自己的主题中继承 Holo.Dark 主题?此外,您可以查看 Holo Everywhere,如果您愿意,它会渗入旧版本的 Android。 holoeverywhere.com
  • 或者您正在使用 API 15 中的 android-support.jar?
  • 我正在使用支持 lib v4 并使用了 Theme.Black 和 Theme.Holo(深色),但没有变化。好主意!

标签: android android-notifications android-4.2-jelly-bean


【解决方案1】:

之所以发生这种情况,是因为您的 AndroidManifest.xml 中的 targetSdk 为

我相信当您以 11 为目标时发生的兼容性变化是默认主题,因为 Holo.由于您(和我)的目标小于 11,因此它采用了一些适用于这些按钮的兼容性主题,即使它不应该这样做。我假设即使您的应用程序/活动设置为 Holo,它实际上并不适用于通知,因为它们处于不同的进程中。

这只是我的猜测。使用 CommonsWare 的通知演示,只需修改 targetSdk 即可显示此行为。

【讨论】:

  • 我错过了你的目标是 16。肯定是这样吗?
  • 不,事实并非如此 :-) 我更改了它,但 Eclipse 有时会出现一些刷新问题,所以在我运行干净之前它没有被更改。所以现在他们很漂亮!非常感谢,虽然我不能在不久的将来更改 targetSDK,所以我将不得不等待这个功能。
  • 一个应用程序 API 级别的设备如何在通知栏中使用哪个主题?通知栏不应该与操作系统的其余部分处于它自己的 API 级别吗?
  • 你会这么认为......但显然情况并非如此:(你可以为你的通知制作自定义视图,并且通知在姜饼和蜂窝之间发生了很大变化,所以我认为这就是原因他们为此添加了一些兼容性垃圾。
【解决方案2】:

我有同样的问题,使用Android studio (0.8.11) 和Gradle (0.13.0)

compileSdkVersion 20
buildToolsVersion "20.0"

defaultConfig {
        applicationId "x.xx.xxxxxx"
        minSdkVersion 10
        targetSdkVersion 20
        versionCode x
        versionName "x.xx"
    }

通过将uses-sdk 添加到Manifest 来解决它

<uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="20" />

我知道Manifest 值将被Gradle 值覆盖。但这解决了它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 2015-01-30
    相关资源
    最近更新 更多