맞춤 알림을 표시하는 앱이 있습니다. 문제는 Android 5에서 실행할 때 알림 표시 줄의 작은 아이콘이 흰색으로 표시됩니다. 이 문제를 어떻게 해결할 수 있습니까?
맞춤 알림을 표시하는 앱이 있습니다. 문제는 Android 5에서 실행할 때 알림 표시 줄의 작은 아이콘이 흰색으로 표시됩니다. 이 문제를 어떻게 해결할 수 있습니까?
답변:
수락 된 답변이 (완전히) 정확하지 않습니다. 물론 알림 아이콘이 컬러로 표시되지만 대상 SDK를 Android Lollipop보다 낮게 설정하면 큰 단점이 있습니다!
제안 된대로 대상 SDK를 20으로 설정하여 흰색 아이콘 문제를 해결하면 앱에서 Android Lollipop을 타겟팅하지 않으므로 Lollipop 관련 기능을 사용할 수 없습니다.
http://developer.android.com/design/style/iconography.html을 살펴보면 흰색 스타일이 알림이 Android Lollipop에 표시되는 방식이라는 것을 알 수 있습니다.
Lollipop에서 Google은 흰색 알림 아이콘 뒤에 표시되는 색상 ( https://developer.android.com/about/versions/android-5.0-changes.html )을 사용하는 것이 좋습니다.
따라서 더 나은 해결책은 앱에 실루엣 아이콘을 추가하고 장치에서 Android Lollipop을 실행하는 경우 사용하는 것입니다.
예를 들어 :
Notification notification = new Notification.Builder(context)
.setAutoCancel(true)
.setContentTitle("My notification")
.setContentText("Look, white in Lollipop, else color!")
.setSmallIcon(getNotificationIcon())
.build();
return notification;
그리고 getNotificationIcon 메소드에서 :
private int getNotificationIcon() {
boolean useWhiteIcon = (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP);
return useWhiteIcon ? R.drawable.icon_silhouette : R.drawable.ic_launcher;
}
ctrl+f
와 입력 notification
이 아무것도 찾을 수없는 페이지에 ...
사용자 Daniel Saidi와 완전히 동의합니다. 순서가하기 Color
위해 NotificationIcon
나는이 대답을 쓰고 있어요.
이를 위해 아이콘 을 만들고을 추가하려는 곳마다 Silhouette
섹션을 만들어야 Transparent
합니다 Colors
. 즉,
당신은 사용하여 색상을 추가 할 수 있습니다
.setColor(your_color_resource_here)
참고 : setColor
에서만 사용할 수 Lollipop
있으므로 확인해야합니다.OSVersion
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
Notification notification = new Notification.Builder(context)
...
} else {
// Lollipop specific setColor method goes here.
Notification notification = new Notification.Builder(context)
...
notification.setColor(your_color)
...
}
Lollipop
대상으로 사용하여이 작업을 수행 할 수도 있습니다 SDK
.
Google 개발자 콘솔 알림 가이드 라인 에 NotificationIcon
제공된 모든 지침 .
기본 알림 아이콘 크기 24x24dp
mdpi @ 24.00dp = 24.00px
hdpi @ 24.00dp = 36.00px
xhdpi @ 24.00dp = 48.00px
자세한 내용 은 알림 아이콘 크기에 대한 이 링크를 참조하십시오 .
setColor
Kitkat (API 19) 및 IceCreamSandwich (API 15)에서 테스트 했지만 두 경우 모두 색상을 무시했지만 충돌하지 않았습니다 . OS 버전 확인을 안전하게 생략 할 수 있습니까?
이것은 안드로이드가 알림 아이콘을 표시하는 데 사용하는 코드입니다.
// android_frameworks_base/packages/SystemUI/src/com/android/systemui/
// statusbar/BaseStatusBar.java
if (entry.targetSdk >= Build.VERSION_CODES.LOLLIPOP) {
entry.icon.setColorFilter(mContext.getResources().getColor(android.R.color.white));
} else {
entry.icon.setColorFilter(null);
}
따라서 대상 SDK 버전을 무언가로 설정해야 <21
하며 아이콘은 색상이 유지됩니다. 이것은 추악한 해결 방법이지만 예상대로 수행됩니다. 어쨌든, 난 정말 구글의 다음과 같은 제안 설계 지침 : "알림 아이콘이 완전히 흰색이어야합니다."
구현 방법은 다음과 같습니다.
Gradle / Android Studio를 사용하여 앱을 빌드하는 경우 다음을 사용하십시오 build.gradle
.
defaultConfig {
targetSdkVersion 20
}
그렇지 않으면 (Eclipse 등) 다음을 사용하십시오 AndroidManifest.xml
.
<uses-sdk android:minSdkVersion="..." android:targetSdkVersion="20" />
알림 아이콘이 흰색으로 바뀌지 않도록하려면 "실루엣"아이콘을 사용하십시오. 흰색 바탕에 투명한 배경 이미지. Irfanview 를 사용 하여 빌드 할 수 있습니다.
IrfanView
다음 그림 도구의 경우 F12 키를 누르고 필요한 경우 그림을 청소하십시오 (원치 않는 부분은 제거하고 매끄럽게 닦으십시오)Image / Decrease Color Depth
~ 2 (흑백 사진의 경우)Image / Negative
(검은 그림의 흰색)Image / Resize/Resample
144 x 144까지 (크기 변경 방법 "크기 변경"을 사용하여 "재 샘플링"을 사용하지 않으면, 그림이 픽셀 당 24 컬러 비트 (24 BPP)로 다시 증가됨)File / Save as PNG
, 확인 Show option dialog
, 확인 Save Transparent Color
,을 클릭 Save
한 다음 이미지에서 검은 색을 클릭하여 투명 색상을 설정하십시오Android는 drawable-xxhdpi 사진 해상도 (144 x 144) 만 사용하는 것으로 보이므로 결과 ic_notification.png
파일을에 복사하십시오 \AndroidStudio\Projects\...\app\src\main\res\drawable-xxhdpi
. .setSmallIcon(R.drawable.ic_notification)
코드에서 사용하거나 getNotificationIcon()
위에서 제안한 Daniel Saidi와 같이 사용하십시오 .
Roman Nurik의 Android Asset Studio를 사용할 수도 있습니다 .
또 다른 옵션은 버전 별 드로어 블 (밉맵) 디렉토리를 활용하여 Lollipop 이상에 다른 그래픽을 제공하는 것입니다.
내 응용 프로그램에서 "v21"디렉토리에는 투명한 텍스트가있는 아이콘이 포함되어 있고 다른 디렉토리에는 투명하지 않은 버전이 있습니다 (Lollipop 이전의 Android 버전).
다음과 같이 보일 것입니다.
이런 식으로 코드에서 버전 번호를 확인할 필요가 없습니다. 예 :
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_notification)
.setContentTitle(title)
.setContentText(message)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
마찬가지로 "icon"속성을 사용하는 경우 GCM 페이로드에서 "ic_notification"(또는 호출하도록 선택한 모든 항목)을 참조 할 수 있습니다.
https://developers.google.com/cloud-messaging/http-server-ref#notification-payload-support
setColor
추가 코드를 포함하지 않고 그렇게 설정할 수 있습니까?
안드로이드 디자인 지침에 따르면 실루엣을 사용해야 builder.setSmallIcon(R.drawable.some_notification_icon);
하지만 여전히 화려한 아이콘을 알림 아이콘으로 표시하려면 롤리팝에 대한 트릭과 위의 코드 아래에서 사용하십시오. largeIcon은 기본 알림 아이콘 역할을하며 smallIcon의 오른쪽 하단에 표시 될 smallIcon의 실루엣을 제공해야합니다.
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
builder.setColor(context.getResources().getColor(R.color.red));
builder.setSmallIcon(R.drawable.some_notification_icon);
builder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher));
}
롤리팝 이전 .setSmallIcon(R.mipmap.ic_launcher)
은 빌더 에서만 사용하십시오.
이제 안드로이드 스튜디오는 모든 필수 drawbale 폴더에 아이콘을 생성 하는 플러그인 Image Asset을 제공 합니다
Image Asset Studio를 사용하면 다양한 밀도로 다양한 유형의 아이콘을 만들고 프로젝트에서 아이콘이 배치 될 위치를 정확하게 보여줄 수 있습니다. 아이콘을 조정하고 배경을 추가하는 도구가 포함되어 있으며 결과는 미리보기 창에 표시되어 의도 한대로 정확하게 나타납니다. 이러한 도구는 아이콘 디자인 및 가져 오기 프로세스를 대폭 간소화 할 수 있습니다.
당신은에 액세스 할 수 있습니다 이미지 자산을 > 새로운 클릭으로 이미지 자산 옵션을 클릭하고이 같은 창 표시 될 것입니다 : -
나는 같은 문제에 직면하고 있었고 앱 알림 아이콘이 평평하지 않았기 때문입니다. 안드로이드 버전 롤리팝 또는 롤리팝 이하의 경우 앱 알림 아이콘이 평평해야하며 그림자가있는 아이콘을 사용하지 마십시오.
아래는 모든 안드로이드 버전에서 완벽하게 작동하는 코드입니다.
private void sendNotification(String msg) {
NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
Intent intent = new Intent(this, CheckOutActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
this).setSmallIcon(R.drawable.ic_notification)
.setContentTitle(getString(R.string.app_name))
.setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
.setContentText(msg).setLights(Color.GREEN, 300, 300)
.setVibrate(new long[] { 100, 250 })
.setDefaults(Notification.DEFAULT_SOUND).setAutoCancel(true);
mBuilder.setContentIntent(contentIntent);
mNotificationManager.notify(new Random().nextInt(), mBuilder.build());
}
잘못된 아이콘
오른쪽 아이콘
알파 채널 은 Android가 알림 아이콘에 사용하는 이미지의 유일한 데이터입니다.
alpha == 1
: 픽셀이 흰색으로 표시alpha == 0
: 선택한 색상으로 픽셀이 표시됩니다. Notification.Builder#setColor(int)
이것은 https://developer.android.com/about/versions/android-5.0-changes.html에 언급되어 있습니다 :
시스템은 조치 아이콘 및 기본 알림 아이콘에서 모든 비 알파 채널을 무시합니다. 이 아이콘은 알파 전용이라고 가정해야합니다.
거의 모든 내장 드로어 블 이 이에 적합한 알파 이미지 인 것 같습니다. 따라서 다음과 같은 것을 사용할 수 있습니다.
Notification.Builder.setColor(Color.RED)
.setSmallIcon(android.R.drawable.star_on)
하지만 여전히 공식적으로 확인하는 API 문서 를 찾고 있습니다.
Android 22에서 테스트되었습니다.
setColor
Kitkat (API 19) 및 IceCreamSandwich (API 15)에서 테스트 했지만 두 경우 모두 색상을 무시했지만 충돌하지 않았습니다 . OS 버전 확인을 안전하게 생략 할 수 있습니까?
알림은 아래 설명 된대로 회색조 입니다. 그들은 다른 사람들이 쓴 것에도 불구하고 흑백이 아닙니다. 네트워크 강도 막대와 같이 여러 가지 음영이있는 아이콘을 보셨을 것입니다.
API 21 (Lollipop 5.0) 이전에는 색상 아이콘이 작동합니다. 애플리케이션이 API 20을 대상으로하도록 강요 할 수 있지만 애플리케이션에서 사용할 수있는 기능이 제한되므로 권장하지 않습니다. 실행중인 API 레벨을 테스트하고 컬러 아이콘 또는 그레이 스케일 아이콘을 적절하게 설정할 수 있지만 그만한 가치는 없습니다. 대부분의 경우 그레이 스케일 아이콘을 사용하는 것이 가장 좋습니다.
이미지에는 RGBA (빨강 / 녹색 / 파랑 / 알파)의 4 개 채널이 있습니다. 알림 아이콘의 경우 Android는 R, G 및 B 채널을 무시합니다. 카운트하는 유일한 채널은 불투명도라고도하는 알파입니다. 그림 색상의 알파 값을 제어 할 수있는 편집기로 아이콘을 디자인하십시오.
알파 값이 그레이 스케일 이미지를 생성하는 방법 :
로 변경 setColor
:
전화하십시오 NotificationCompat.Builder.setColor(int argb)
. 의 설명서에서 Notification.color
:
이 알림을 표시 할 때 표준 스타일 템플릿에서 적용 할 강조 색상 (색상 상수와 같은 ARGB 정수)입니다. 현재 템플릿 디자인은이 색상의 필드 위에 아이콘 이미지 (흰색으로 스텐실)를 오버레이하여 화려한 헤더 이미지를 구성합니다. 알파 성분은 무시됩니다.
setColor를 사용한 테스트에서 알파 구성 요소는 무시 되지 않습니다 . 대신 여전히 그레이 스케일을 제공합니다. 알파 값이 높을수록 픽셀이 흰색으로 바뀝니다. 알파 값이 낮 으면 픽셀이 알림 영역의 배경색 (장치의 검은 색) 또는 풀다운 알림의 지정된 색으로 바뀝니다. (다른 사람들이 약간 다른 동작을보고 한 것 같습니다.)
Android 게시 Lollipop 릴리스 android는 알림 표시 줄에 알림 아이콘을 표시하기위한 지침을 변경했습니다. 공식 문서에 "컬러가 포함 된 자산 업데이트 또는 제거. 시스템은 작업 아이콘 및 기본 알림 아이콘에서 모든 비 알파 채널을 무시합니다.이 아이콘은 알파 전용이라고 가정해야합니다. 시스템은 알림 아이콘을 흰색으로 그립니다. 짙은 회색의 액션 아이콘 " 이제 평신도 용어에서 의미하는 것은 "이미지의 모든 부분을 투명 픽셀로 변환하지 않는 것"입니다. 모든 색상과 투명하지 않은 픽셀은 흰색으로 표시됩니다. "
https://blog.clevertap.com/fixing-notification-icon-for-android-lollipop-and-above/ 에서 스크린 샷을 사용 하여이 작업을 수행하는 방법을 자세히 볼 수 있습니다
희망이 도움이
GoogleFireBaseMessaging을 사용하는 경우 "알림"페이로드에서 "아이콘 ID"를 설정할 수 있습니다 (흰색 막대 아이콘 문제를 해결하는 데 도움이 됨).
{
"to":"<fb_id>",
"priority" : "high",
"notification" :
{
"title" : "title",
"body" : "body" ,
"sound" : "default",
"icon" : "ic_notification"
}
}
ic_notification 을 R.drawable 의 고유 ID로 설정 하십시오.
나는 이것에 너무 많은 문제에 직면했지만 인터넷을 통해 검색 한 후이 문제에 대한 다른 해결책을 찾았습니다. 모든 해결책을 요약하고 설명하겠습니다.
참고 :이 솔루션은 Phonegap Cordova 사용자를위한 것입니다.
<preference name="android-targetSdkVersion" value="20"/>
android-targetSdkVersion 값을 21 미만으로 설정해야합니다. 따라서이 값을 설정하면 알림 아이콘 이미지가 Android 6 (Marshmallow)까지 표시되며 Android 7 (Nougat)에서는 작동하지 않습니다. 이 솔루션은 저에게 효과적이었습니다.
<preference name="StatusBarStyle" value="lightcontent" />
그러나이 솔루션은 앱을 열 때만 작동합니다. 따라서이 솔루션이 최고의 솔루션은 아니지만 많은 사용자에게 효과적이라고 생각합니다.
그리고 위의 솔루션 중 하나가 문제에 도움이 될 것이라고 확신합니다.
설명서에 따르면 Android 3.0 (API 레벨 11) 이후 알림 아이콘이 흰색이어야합니다 .
https://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar
"상태 표시 줄 아이콘은 투명한 배경에서 흰색 픽셀로 구성되며 알파 블렌딩은 부드러운 가장자리와 적절한 경우 내부 질감에 사용됩니다."
이 두 가지를 앱 gradle에 섞으십시오
defaultConfig {
applicationId "com.example.abdulwahidvi.notificationproblem"
minSdkVersion 16
//This is the version that was added by project by default
targetSdkVersion 26 <------ default
// Changed it to version 20
targetSdkVersion 20 <------ mine
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
android:targetSdkVersion="20"
<이어야합니다 21
.