programing

Android 5 롤리팝에서 알림 표시줄 아이콘이 흰색으로 바뀝니다.

powerit 2023. 9. 5. 20:52
반응형

Android 5 롤리팝에서 알림 표시줄 아이콘이 흰색으로 바뀝니다.

사용자 지정 알림을 보여주는 앱이 있습니다.문제는 Android 5에서 실행할 때 알림 표시줄의 작은 아이콘이 흰색으로 표시된다는 것입니다.이걸 어떻게 고칠 수 있을까요?

허용된 답은 (완전히) 정확하지 않습니다.물론 알림 아이콘을 컬러로 표시하지만 대상 SDK를 Android Rollipop보다 낮게 설정하면 큰 단점이 있습니다!

제안한 대로 대상 SDK를 20으로 설정하여 흰색 아이콘 문제를 해결하면 앱이 안드로이드 롤리팝을 대상으로 하지 않으므로 롤리팝 관련 기능을 사용할 수 없습니다.

http://developer.android.com/design/style/iconography.html, 보면 Android Rollipop에서 알림이 표시되는 방식이 흰색 스타일임을 알 수 있습니다.

Rollipop에서 Google은 (흰색) 알림 아이콘 뒤에 표시되는 색상을 사용할 것을 제안합니다. - https://developer.android.com/about/versions/android-5.0-changes.html

그래서 더 나은 해결책은 앱에 실루엣 아이콘을 추가해서 안드로이드 롤리팝을 실행하고 있다면 사용하는 것이라고 생각합니다.

예를 들어:

Notification notification = new Notification.Builder(context)
            .setAutoCancel(true)
            .setContentTitle("My notification")
            .setContentText("Look, white in Lollipop, else color!")
            .setSmallIcon(getNotificationIcon())
            .build();

    return notification;

그리고 getNotification에서아이콘 방법:

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;
}

사용자 Daniel Saidi의 의견에 전적으로 동의합니다.Color위해서NotificationIcon저는 이 답변을 씁니다.

그러려면 아이콘을 다음과 같이 만들어야 합니다.Silhouette그리고 약간의 섹션을 만듭니다.Transparent가할위를 곳 Colors를 들어 예를 들어,

enter image description here

다음을 사용하여 색상을 추가할 수 있습니다.

.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)
    ...            
}

또한 다음을 사용하여 이를 달성할 수 있습니다.LollipopSDK.

에 관한 모든 NotificationIconGoogle 개발자 콘솔 알림 안내서에 나와 있습니다.

기본 알림 아이콘 크기 24x24dp

mdpi    @ 24.00dp   = 24.00px
hdpi    @ 24.00dp   = 36.00px
xhdpi   @ 24.00dp   = 48.00px

또한 자세한 내용은 알림 아이콘 크기에 대한 링크를 참조하십시오.

Android에서 알림 아이콘을 표시하는 데 사용하는 코드는 다음과 같습니다.

// 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);
}

을 something으로 .<21 아이콘이 계속 색으로 표시됩니다.이는 보기 흉한 해결 방법이지만 예상되는 작업을 수행합니다.어쨌든, 저는 구글의 디자인 가이드라인을 따를 것을 정말로 제안합니다."알림 아이콘은 완전히 흰색이어야 합니다."

구현 방법은 다음과 같습니다.

앱을 Gradle한다면, Gradle/Android Studio를 하세요.build.gradle:

defaultConfig {
    targetSdkVersion 20
}

그렇지 않은 ( 그렇이경사(이클립스 등) 용지를 합니다.AndroidManifest.xml:

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

알림 아이콘이 흰색으로 변하는 것을 방지하려면 알림 아이콘에 "Silhouette" 아이콘을 사용합니다. 즉, 투명 배경 이미지가 흰색으로 표시됩니다.Irfanview를 사용하여 다음을 작성할 수 있습니다.

  • 하여 림그선택, 림열로 엽니다.IrfanView도구에 필요한 부분을 하고, 광택을 내십시오). F12는 F12보다, F12는 F12보다, F12는 F12보다 더 중요합니다.
  • Image / Decrease Color Depth)2도(흑백까지사경)
  • Image / Negative 그림의 (검은색사흰색의경우의진경)검
  • Image / Resize/Resample x 이 아닌 방법 " 사용)로, 그렇지 색 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를 사용할 수도 있습니다.

다른 옵션은 버전별 드로잉 가능(mipmap) 디렉터리를 활용하여 롤리팝 이상에 다른 그래픽을 제공하는 것입니다.

내 앱에서 "v21" 디렉터리에는 투명 텍스트가 있는 아이콘이 포함되어 있는 반면 다른 디렉터리에는 투명하지 않은 버전(Rollipop보다 이전 버전의 Android)이 포함되어 있습니다.

File system

이것은 다음과 같이 보여야 합니다.

Android Studio

이렇게 하면 코드의 버전 번호를 확인할 필요가 없습니다.

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

이제 Android 스튜디오는 필요한 모든 드로우베일 폴더에 생성 아이콘이 되는 플러그인 이미지 자산을 제공합니다.

Image Asset Studio는 다양한 밀도로 다양한 유형의 아이콘을 만들 수 있도록 도와주며 프로젝트에서 아이콘이 배치될 위치를 정확하게 보여줍니다.여기에는 아이콘을 조정하고 배경을 추가하는 도구가 포함되어 있으며, 결과를 미리 보기 창에 표시하여 원하는 대로 표시할 수 있습니다.이러한 도구를 사용하면 아이콘 설계 및 가져오기 프로세스를 획기적으로 간소화할 수 있습니다.

이미지 자산에 액세스하려면 new > Image Asset 옵션을 클릭하면 다음과 같은 표시 창이 나타납니다.

enter image description here

enter image description here

디자인 Android용 .builder.setSmallIcon(R.drawable.some_notification_icon);하지만 여전히 알림 아이콘으로 컬러 아이콘을 표시하고 싶다면 롤리팝 이상은 아래 코드를 사용하는 요령입니다.큰 아이콘은 기본 알림 아이콘으로 작동하며 큰 아이콘의 오른쪽 아래에 표시되므로 작은 아이콘에 대한 실루엣도 제공해야 합니다.

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)당신의 건설업자와 함께.

저도 같은 문제에 직면했는데 앱 알림 아이콘이 평평하지 않아서였습니다.안드로이드 버전 막대사탕이나 막대사탕 아래의 경우에도 앱 알림 아이콘이 평평해야 하며, 그림자가 있는 아이콘 등을 사용하지 마십시오.

아래는 모든 안드로이드 버전에서 완벽하게 작동했던 코드입니다.

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

아이콘
enter image description here

오른쪽 아이콘

enter image description here

Alpha-channel은 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에서 테스트됨.

을제니다를 합니다.android:targetSdkVersion="21"xml.message.xml(으)로 합니다.할 것입니다! 으로부터 당신의 . . 그것은 단지 속임수입니다. 저는 이것을 적용하고 알림에서 다채로운 아이콘을 찾았습니다.

알림은 아래 설명과 같이 회색으로 표시됩니다.그것들은 다른 사람들이 쓴 것에도 불구하고 흑백이 아닙니다.네트워크 강도 표시줄과 같이 여러 개의 음영이 있는 아이콘을 본 적이 있을 것입니다.

API 21(롤리팝 5.0) 이전 버전에서는 컬러 아이콘이 작동합니다.응용 프로그램이 API 20을 대상으로 하도록 강제할 수 있지만, 이는 응용 프로그램에서 사용할 수 있는 기능을 제한하므로 권장되지 않습니다.실행 중인 API 수준을 테스트하고 색상 아이콘이나 회색 스케일 아이콘을 적절하게 설정할 수 있지만, 이는 가치가 없습니다.대부분의 경우 회색 스케일 아이콘과 함께 사용하는 것이 가장 좋습니다.

영상에는 RGBA(빨간색/녹색/파란색/알파)의 4개 채널이 있습니다.알림 아이콘의 경우 Android는 R, G 및 B 채널을 무시합니다.값을 매기는 유일한 채널은 불투명도라고도 하는 알파입니다.그림 색상의 알파 값을 제어할 수 있는 편집기로 아이콘을 디자인합니다.

알파 값이 회색 스케일 이미지를 생성하는 방법:

  • Alpha = 0(투명) — 이 픽셀은 투명하며 배경색을 나타냅니다.
  • Alpha = 255(픽셀) — 이 픽셀은 흰색입니다.
  • Alpha = 1 ... 254 — 이 픽셀들은 여러분이 예상하는 것과 정확히 일치하며 투명과 흰색 사이의 음영을 제공합니다.

으로 setColor:

  • NotificationCompat.Builder.setColor(int argb)다에대 설서확인의 하십시오.Notification.color:

    이 알림을 표시할 때 표준 스타일 템플릿에서 적용할 강조 색상(색상의 상수와 같은 ARGB 정수).현재 템플리트 설계는 아이콘 이미지(흰색으로 표시)를 해당 색상의 필드 위에 겹쳐 색상이 지정된 헤더 이미지를 구성합니다.알파 성분은 무시됩니다.

    setColor를 사용하여 테스트한 결과 Alpha 구성 요소가 무시되지 않고 회색 스케일을 제공합니다.알파 값이 높을수록 픽셀이 흰색으로 바뀝니다.Alpha 값이 낮으면 픽셀이 알림 영역의 배경색(내 장치의 검은색) 또는 풀다운 알림의 지정된 색으로 바뀝니다.(다른 사람들이 약간 다른 행동을 보고한 것 같으니 주의하세요!)

포스트 안드로이드 롤리팝 릴리스 안드로이드는 알림 표시줄에 알림 아이콘을 표시하기 위한 지침을 변경했습니다.공식 문서에는 "색상과 관련된 자산을 업데이트하거나 제거하십시오.시스템은 작업 아이콘과 기본 알림 아이콘에서 알파가 아닌 모든 채널을 무시합니다.이 아이콘들은 영숫자로만 표시된다고 가정해야 합니다.시스템은 알림 아이콘을 흰색으로 그리고 작업 아이콘을 진한 회색으로 그립니다."이것이 일반인들에게 의미하는 것은 "보여주고 싶지 않은 이미지의 모든 부분을 투명한 픽셀로 변환"입니다.모든 색상과 투명하지 않은 픽셀이 흰색으로 표시됩니다."

스크린샷을 사용하여 이 작업을 수행하는 방법을 자세히 확인할 수 있습니다. https://blog.clevertap.com/fixing-notification-icon-for-android-lollipop-and-above/

도움이 되길 바랍니다.

단일 색상 투명 PNG 이미지를 가져와야 합니다.그래서 당신은 작은 아이콘의 아이콘 색상을 설정할 수 있습니다.그렇지 않으면 MOTO와 같은 일부 장치에서 흰색으로 표시됩니다.

Google FireBase Messaging을 사용하는 경우 "알림" 페이로드에서 "아이콘"을 설정할 수 있습니다(흰색 막대 아이콘 문제를 해결하는 데 도움이 됩니다).

{
    "to":"<fb_id>",
    "priority" : "high",
    "notification" : 
    {
        "title" : "title",
        "body" : "body" ,
        "sound" : "default",
        "icon" : "ic_notification"
    }
}

R.drawable에서 자신의 ID로 setic_notification을 설정합니다.

저는 또한 이 문제에 너무 많은 문제에 직면했지만 인터넷을 검색한 후 이 문제에 대한 다른 해결책을 찾았습니다.모든 솔루션을 요약하고 설명하겠습니다.

참고: 이 솔루션은 Phonegap cordova 사용자를 위한 것입니다.

<preference name="android-targetSdkVersion" value="20"/>

안드로이드 대상 SdkVersion 값을 21 미만으로 설정해야 합니다.따라서 이 값을 설정한 후에는 알림 아이콘 이미지가 Android 6(Mashmallow)까지 나타납니다. Android 7(Nougat)에서는 작동하지 않습니다.이 해결책은 저에게 효과가 있었습니다.

  1. 구성 파일에서 상태 표시줄Style을 변경합니다.예제

<preference name="StatusBarStyle" value="lightcontent" />

그러나 이 솔루션은 앱을 열어야만 작동합니다.따라서 이 솔루션은 최상의 솔루션은 아니지만 많은 사용자에게 효과가 있었습니다.

  1. 아이콘을 투명하게 만듭니다.이 해결책은 많은 사람들에게 효과가 있었습니다.실제로 Native 애플리케이션을 개발할 때는 (a)App 아이콘 (b)Notification 아이콘 (c)Status bar 아이콘 이미지의 세 가지 이미지를 제공해야 하지만, Hybrid 모바일 애플리케이션 개발의 경우에는 그렇게 할 수 있는 옵션이 없습니다.따라서 아이콘을 투명하게 만들면 이 솔루션이 문제를 해결할 수 있습니다.

그리고 위의 해결책 중 하나가 당신의 문제에 효과가 있을 것이라고 확신합니다.

참고: 아이콘이 나타나지 않으면 로컬 또는 원격 알림 구성에 올바른 아이콘 이름이 포함되어 있는지 확인합니다.

'largeIcon' => 'ic_launcher',
'smallIcon' => 'ic_launcher' // defaults to ic_launcher, 

API 21에 대해 이야기하기에는 너무 늦은 것 같은데, 쉬운 방법을 찾았습니다.

'사용자 지정 알림(사용자 지정 레이아웃)'을 사용하는 경우,

원격 보기

setImageViewResource(int viewId, int srcId);

그리고.

setImageViewUri(int viewId, Uri uri); 

롤리팝(API 21)에서 이미지를 흰색으로 만듭니다.

하지만 사용할 때

setImageViewBitmap(int viewId, Bitmap bitmap);

이미지가 화이트 마스크되지 않습니다!

설명서에 따르면 Android 3.0(API 레벨 11) 이후 알림 아이콘은 흰색이어야 합니다.

https://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar

상태 표시줄 아이콘은 투명 배경에 흰색 픽셀로 간단하게 구성되며, 적절한 경우 부드러운 가장자리와 내부 질감에 사용되는 알파 블렌딩이 사용됩니다.

이 두 가지를 앱 그라들로 혼합합니다.

 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.

언급URL : https://stackoverflow.com/questions/28387602/notification-bar-icon-turns-white-in-android-5-lollipop

반응형