Серые кнопки при добавлении действий к уведомлениям в желе Bean
Я добавляю две кнопки к уведомлению в своем приложении, которое настроено на целевой уровень API 8. Проблема состоит в том, что две кнопки отображаются как две большие серые кнопки, совершенно неулокальные с остальными уведомлениями. Я тестировал его как на Nexus 7, так и на Galaxy Nexus.
![enter image description here]()
Все примеры, которые я видел, имеют красивые черные кнопки, такие как уведомление о входящем вызове:
http://www.androidng.com/wp-content/uploads/2012/07/android-jelly-bean-notifications.jpeg
Я бы предположил, что это будет легко, но сегодня такой удачи не бывает. Кто-нибудь знает, где я, возможно, ошиблась? Ниже приведен фрагмент моего кода, который генерирует уведомление с последней библиотекой поддержки.
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);
Ответы
Ответ 1
Итак, это происходит потому, что ваш targetSdk в вашем AndroidManifest.xml равен < 11.
Я считаю, что изменение совместимости, которое происходит, когда вы нацеливаете 11, - это тема по умолчанию, потому что Holo. Поскольку ваша (и моя) цель меньше 11, она прибегает к какой-то теме совместимости, которую она применяет на этих кнопках, даже если она не должна. Я предполагаю, что даже если ваше приложение/активность установлено на Holo, оно фактически не применяется к уведомлению, поскольку они находятся в другом процессе.
Это просто моя догадка. Используя демонстрацию уведомлений CommonsWare и просто измените targetSdk, вы увидите это поведение.
Ответ 2
Im имеет ту же проблему, используя 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
. но это решить.