Как изменить цвет фона пользовательского уведомления в зависимости от дневного / ночного режима - PullRequest
0 голосов
/ 16 мая 2019

Мы небольшая группа, работающая над школьным заданием.Мы создали пользовательское уведомление, и оно отлично работает.Единственная проблема в том, что мне трудно понять, как заставить пользовательское уведомление изменять цвет фона в зависимости от того, находится ли он в дневном или ночном режиме.

Мой код для создания уведомления

Intent challengedIntent = new Intent(this, StartActivity.class); 
stackBuilder.addNextIntentWithParentStack(challengedIntent);
PendingIntent challengedPendingIntent =
            stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);


RemoteViews views = new RemoteViews(getPackageName(), R.layout.notification);

NotificationCompat.Builder builder = new NotificationCompat.Builder(this, getString(R.string.app_channel))
            .setSmallIcon(R.mipmap.carfight_launcher)
            .setCustomContentView(views)
            .setCustomBigContentView(views)
            .setStyle(new NotificationCompat.DecoratedCustomViewStyle())
            .setContentIntent(challengedPendingIntent)
            .setColorized(true)
            .setColor(Color.parseColor("#ff0000"));

views.setImageViewResource(R.id.imagesVeiw_wins,R.drawable.ic_medal_solid);
views.setImageViewResource(R.id.imageVeiw_matches,R.drawable.ic_battle);


NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(NOTIFICATION_ID, builder.build());

Как мне изменить его, чтобы он реагировал на дневной / ночной режим?

minSDKVersion равно 16

1 Ответ

0 голосов
/ 16 мая 2019

Один из способов сделать это - сначала определить, находится ли телефон в ночном режиме.Это можно сделать с помощью следующего кода:

int nightModeFlags =
    getContext().getResources().getConfiguration().uiMode &
    Configuration.UI_MODE_NIGHT_MASK;
switch (nightModeFlags) {
    case Configuration.UI_MODE_NIGHT_YES:
         setupNightMode();
         break;

    case Configuration.UI_MODE_NIGHT_NO:
         setupDayMode();
         break;

    case Configuration.UI_MODE_NIGHT_UNDEFINED:
         doStuff();
         break;
}

Затем, когда вы узнаете, работает ли он в ночном режиме, просто создайте соответствующий объект RemoteView.Это означает, что у вас должно быть два макета, один для обычного режима, а другой для ночного режима.Примерно так:

RemoteView remoteView;

//Switch case here

setupNightMode(){
remoteView = new RemoteView() //inflate night mode layout
}


setupDayMode()
{
remoteView = new RemoteView() //inflate day mode layout
}

Наконец: используйте объект remoteView при создании уведомления:

NotificationCompat.Builder builder = ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...