Most new Android devices now provide an ability to switch between normal theme and some kind of dark theme. I've tested it on the Android emulator, and it seems that the emulator shows white notification panels even when the system is set to a dark theme, but on Samsung's device, the notification panels also becomes dark to match the system theme.
So, my question is, is it possible to make my custom notification (Button on a LinearLayout on a RemoteView) to match the system theme? That is, when the system is using the normal theme, I want to show a dark caption on a bright background, and when the system is using a dark theme, I want to show a bright caption on a dark background (the same colours as the rest of the notifications), and when the user switches the theme, I want my notification panel also to change the theme.
Is that possible? Please let me know, if it is impossible or very complex.
Related
I'm developing a program, but as I have the mobile phone in the dark theme, some textViews have a white letter and don't appear due to the color that is placed on them.
But when I switch the phone to the lightweight theme, the textView all appear.
I would like to know if it is possible to disable the dark theme in Android Studio and only use the light theme, even when the phone is set to a dark theme.
Light Theme
Dark Theme
Just put this line in the launcher activity before setContentView()
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
This is a kind of short term solution if you don't want to properly implement dark theme in your app (the one that comes to the entire OS after A10)
Set your android:textColor=#android:attr/textColorPrimary which automatically choose the text color based on light or dark theme
Also, since you asked what to do to prevent from that default behaviour that switches your app to the dark mode when A10 and above devices turn on system wide dark mode then
You can make your Activity theme a descendant of Theme.MaterialComponents.Light or similar AppCompat variant . Currently all apps use Theme.MaterialComponents.DayNight which gives the default behaviour as above
If you decide to implement a system wide dark mode for your app, it's fairly easy, you can read about it here. Most of the widgets already come with dark mode support, it's just that you will have to do it for your own backgrounds etc
In your themes.xml your application theme's parent should be Theme.MaterialComponents.Light.NoActionBar, or if you wan't to use the action bar (you shouldn't), then Theme.MaterialComponents.Light.DarkActionBar
My app displays custom notifications with RemoteViews and I want them to look like the device theme. If the user has set his device to night mode, the background should be dark and if the user has set his device to day mode, the background should be white. It should use the default color of the device so it looks like the other notifications and just setting the background to #000000 would leave a white border around the notification anyway.
I use ?android:attr/textColorPrimary and ?android:attr/textColorSecondary for the text color.
I haven't set any background color and this works for all devices I've tested except for Samsung... with Samsung devices it's always a white background. In day and night mode.
Is there a style or attribute I can use for my notification background?
Min API is 19.
Edit: When I use #style/TextAppearance.Compat.Notification.Title and #style/TextAppearance.Compat.Notification for the text, the notification is readable (instead of white text on white background) but I'd like to have the right background color.
Edit2: I got my hands on a Samsung device. It looks like even Youtube wasn't able to fix this. Some of the notifications are dark though so there must be a solution.
If you have access to a physical device then just hook it up to Android Studio and use the Layout Inspector and you can find the color being used when it is in light and dark mode. Unfortunately it will only show you the color value, not the attribute, but I think you can only get the attribute with access to Samsung's source code.
When creating custom ActionBar icons what happens if the user changes their theme to something that makes your icon unreadable? Do they have this kind of power?
Example: So say I make an icon for my ActionBar in Holo Dark, so that the icon will be a lighter shade of white. What if the user changes their theme to Holo Light (or can they in my app?), forcing my icon to not be readable because it is also close to the same color as its background? I'm just concerned that if I create a custom app it will not look proper to only certain people.
I have been trying to find something about this but my searches and Google's Iconography pages didn't really give me a clear answer.
Android allows setting a themes to application/activity in AndroidManifest.xml, and you can change theme theme dynamically. If a user change their system themes, it don't affect you application. If you want to change your application/activity themes, you should call setTheme() before setContentView() in Activity.onCreate()
I'm using ActionBarSherlock on my app and when I disable some MenuItem in the ActionBar the icon turns translucent on my phone (HTC One X running stock Android 4.0.4) but I haven't seen this behavior in any other phone or emulator.
Am I right in assuming this behavior is not the default one for the native ActionBar? I like the idea though... It warns the user that the MenuItem is not enabled for some reason (in my case, it's a save button and if at least one field is not filled, it disables the button).
I was thinking in providing myself a translucent icon and set it manually when the MenuItem is disabled. This will work on every Android version, native ActionBar or not. The problem is that on my phone (or any other with the same behavior for that matter), it will be twice as translucent and I don't want that.
Any ideas on how can I properly achieve this effect?
I think that the problem is on the Theme, you are applying the default theme. So, HTC override default theme resources, i think you have to create a custom theme and change the item_background to the default one on sdk resources.
<item name="selectableItemBackground">#android:drawable/item_background</item>
you would have to set the background to be independent of the theme. In the .xml file you could set :
android:background="?android:attr/listSelector"
on the view where you want the color.
I am developing an Android application where I have set the following theme to one of my activities so that I have a nice translucent background.
android:theme="#android:style/Theme.Translucent.NoTitleBar"
This works pretty well with versions before 14 (ICS), but on ICS, although the activity is shown with translucent background, all the elements inside the activity start using Gingerbread theme. i.e. the buttons inside the activity are displayed with yellow highlight when selected instead of blue on ICS. Similarly, a spinner button when activated/clicked display the items as dialog instead of ICS popup/popdown style.
Can anyone please help me on how to get the translucent background along with the ICS theme?
To have the blue highlight from ICS and up you need to use a Holo theme, all other themes will render components as if they are being displayed on Gingerbread and below because that is how the theme is telling the system to render them.
You could extend the Holo theme of your choice and use the members from the translucent theme which will give you your desired effect on ICS and above.
The theme data is available in <android-sdk>/platforms/android-<API-level>/data/res/