适配通知栏字体颜色工具:
public class NotificationBgUtil {
public static boolean isDarkNotificationTheme(Context context) {
return !isSimilarColor(Color.BLACK, getNotificationColor(context));
}
/**
* 获取通知栏颜色
*
* @param context
* @return
*/
public static int getNotificationColor(Context context) {
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
Notification notification = builder.build();
int layoutId = notification.contentView.getLayoutId();
ViewGroup viewGroup = (ViewGroup) LayoutInflater.from(context).inflate(layoutId, null, false);
if (viewGroup.findViewById(android.R.id.title) != null) {
return ((TextView) viewGroup.findViewById(android.R.id.title)).getCurrentTextColor();
}
return findColor(viewGroup);
}
private static boolean isSimilarColor(int baseColor, int color) {
int simpleBaseColor = baseColor | 0xff000000;
int simpleColor = color | 0xff000000;
int baseRed = Color.red(simpleBaseColor) - Color.red(simpleColor);
int baseGreen = Color.green(simpleBaseColor) - Color.green(simpleColor);
int baseBlue = Color.blue(simpleBaseColor) - Color.blue(simpleColor);
double value = Math.sqrt(baseRed * baseRed + baseGreen * baseGreen + baseBlue * baseBlue);
if (value < 180.0) {
// 即表示title的颜色近似黑色,也就是说通知栏背景近似白色
Log.d("NotificationBgUtil","Black");
return true;
}
Log.d("NotificationBgUtil","false" +
"");
return false;
}
private static int findColor(ViewGroup viewGroupSource) {
int color = Color.TRANSPARENT;
LinkedList<ViewGroup> viewGroups = new LinkedList<>();
viewGroups.add(viewGroupSource);
while (viewGroups.size() > 0) {
ViewGroup viewGroup1 = viewGroups.getFirst();
for (int i = 0; i < viewGroup1.getChildCount(); i++) {
if (viewGroup1.getChildAt(i) instanceof ViewGroup) {
viewGroups.add((ViewGroup) viewGroup1.getChildAt(i));
} else if (viewGroup1.getChildAt(i) instanceof TextView) {
if (((TextView) viewGroup1.getChildAt(i)).getCurrentTextColor() != -1) {
color = ((TextView) viewGroup1.getChildAt(i)).getCurrentTextColor();
}
}
}
viewGroups.remove(viewGroup1);
}
return color;
}
}
使用方式:
RemoteViews remoteViews = new RemoteViews(BaseUtil.baseUtil.getContext().getPackageName(), R.layout.notification); remoteViews.setInt(R.id.content, "setTextColor", NotificationBgUtil.isDarkNotificationTheme(BaseUtil.baseUtil.getContext()) == true ? Color.WHITE : Color.BLACK);,详细可参照:http://www.jianshu.com/p/141fc999ac10
相关链接:http://www.jianshu.com/p/426d85f34561?comment=2818827