Android 5 Lollipop에서 알림 표시 줄 아이콘이 흰색으로 바 turns 실행할 때

맞춤 알림을 표시하는 앱이 있습니다. 문제는 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;
}


답변

사용자 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

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


답변

이것은 안드로이드가 알림 아이콘을 표시하는 데 사용하는 코드입니다.

// 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


답변

안드로이드 디자인 지침에 따르면 실루엣을 사용해야 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를 사용하면 다양한 밀도로 다양한 유형의 아이콘을 만들고 프로젝트에서 아이콘이 배치 될 위치를 정확하게 보여줄 수 있습니다. 아이콘을 조정하고 배경을 추가하는 도구가 포함되어 있으며 결과는 미리보기 창에 표시되어 의도 한대로 정확하게 나타납니다. 이러한 도구는 아이콘 디자인 및 가져 오기 프로세스를 대폭 간소화 할 수 있습니다.

당신은에 액세스 할 수 있습니다 이미지 자산을 > 새로운 클릭으로 이미지 자산 옵션을 클릭하고이 같은 창 표시 될 것입니다 : –

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오