change background color of Preference
AndroidAndroid EmulatorAndroid Problem Overview
I have a PreferenceCategory
, xml file and I have defined all preferences in it, I call this from class that extends PreferenceActivity
. I am unable to set the background of my settings screen, this screen is displayed with help of xml file shown below. Please see that I have already defined the android:background="#041A37"
, still the screen remains default color: black.
public class MyPreferenceActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
Context mContext=super.getBaseContext();
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.preference);
//v.setBackgroundColor(Color.rgb(4, 26, 55));
}
}
preference.xml is
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:background="#041A37" >
<PreferenceCategory>
<com.dropcall.SeekBarPreference
android:background="#041A37"
android:defaultValue="5"
android:key="@string/Interference_Delay"
android:progressDrawable="@drawable/seekbardrawable"
android:title="Seconds Delay until intereference" />
<com.dropcall.SeekBarPreference2
android:defaultValue="30"
android:key="@string/Drop_Delay"
android:progressDrawable="@drawable/seekbardrawable"
android:title="Seconds delay until drop" />
<CheckBoxPreference
android:background="@drawable/state_normal"
android:defaultValue="true"
android:key="@string/Drop_Option"
android:title="Close after call drop" />
<CheckBoxPreference
android:background="@drawable/state_normal"
android:defaultValue="true"
android:key="@string/Timer_Option"
android:title="Start timers on launch" />
</PreferenceCategory>
</PreferenceScreen>
Although I have set android:background="#041A37"
in every file, the background doesn't turn into navy blue, or any other color for that matter. It remains default color, black. How to change the background color. Please let me know any pointers / hints , if you had faced same issue let me know what changes you made to set the background color.
Android Solutions
Solution 1 - Android
You can define a theme and then set this for your PreferenceActivity in the manifest. Your theme can then define a a background color or a windowBackground image should you prefer that.
Manifest:
<activity android:label="@string/app_label" android:name=".client.PreferencesActivity"
android:theme="@style/PreferencesTheme">
<intent-filter>
</intent-filter>
</activity>
Then add the theme to your styles.xml
<style name="PreferencesTheme">
<item name="android:windowBackground">@drawable/background_image</item>
<item name="android:background">#FFEAEAEA</item>
</style>
In the above snippet there's both a background color and a background image defined to show how to do it.
Solution 2 - Android
This worked for me
getListView().setBackgroundColor(Color.TRANSPARENT);
getListView().setCacheColorHint(Color.TRANSPARENT);
getListView().setBackgroundColor(Color.rgb(4, 26, 55));
Solution 3 - Android
Another work-around as far as color goes is that you create a theme for the preferences activity and put the background color of list views as well:
<style name="PrefsTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">@color/prefs_bg</item>
<item name="android:textColor">@color/text_color</item>
<item name="android:listViewStyle">@style/listViewPrefs</item>
</style>
<style name="listViewPrefs" parent="@android:style/Widget.ListView">
<item name="android:background">@color/prefs_bg</item>
<item name="android:cacheColorHint">@color/prefs_bg</item>
</style>
Solution 4 - Android
android:background
is not an available attribute, according to the documentation.
It is possible you could theme the PreferenceActivity
to achieve your color change, though I have not tried this, because I want my preferences to look like those of the rest of Android, to improve usability of the app.
Solution 5 - Android
Or you can also make drawable as your background:
>
> getListView().setBackgroundDrawable(getResources().getDrawable(R.drawable.bluegradient));
Note: setBackgroundDrawable()
is deprecated. Use setBackground()
instead.
> getListView().setBackground(getResources().getDrawable(R.drawable.bluegradient));
Solution 6 - Android
I faced with the same requirement (Androidx Preference Screen background for settings fragment).
The below code has worked for me in a fragment. (in themes.xml). I assume that it is gonna work also for an activity.
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.MyApplication" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
...............
<!-- Add below -->
<item name="preferenceTheme">@style/preference</item>
</style>
<style name="preference" parent="Theme.AppCompat">
<item name="android:background">@color/purple_200</item>
</style>
</resources>
Solution 7 - Android
Please specify a linear layout with a textview attached and specify background color and attach this xml to preferencecategory using the layout property.
<PreferenceCategory
android:layout="@layout/preftitle"
>
Where preftitle is an xml which has a linear layout and text view attached.
Solution 8 - Android
Go to res>values>styles.xml>
and add this code to your <style > </style>
the style should must be app base theme
in this @color/activ
is color resources added to colors.
<style name="app_theme" parent="@android:style/Theme">
<item name="android:windowBackground">@color/activ</item>
<item name="android:windowContentOverlay">@drawable/title_bar_shadow</item>
<item name="android:listViewStyle">@style/TransparentListView</item>
</style>
if you use app_theme
name of style tag
then add like this to your manifest
<application
android:name=".XXXXXX"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/app_theme" > //here
If you only want to change your background
Solution 9 - Android
I am using the PreferenceFragmentCompat, the below solution worked for me.
SettingsScreen
import android.os.Bundle
import android.util.TypedValue
import android.view.View
import androidx.annotation.ColorInt
import androidx.preference.ListPreference
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import com.almarai.easypick.R
class SettingsScreen : PreferenceFragmentCompat(),
Preference.OnPreferenceChangeListener {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
//Providing the XML file for the view to be created
setPreferencesFromResource(R.xml.app_settings_preferences, rootKey)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
//Get the Theme specific color
val typedValue = TypedValue()
val theme = requireContext().theme
/*R.attr.colorBackgroundScreenBody is my own attr from attrs.xml file,
you can directly use R.color.red - Or any color from your colors.xml
file if you do not have multi-theme app.*/
theme.resolveAttribute(R.attr.colorBackgroundScreenBody, typedValue, true)
@ColorInt val color = typedValue.data
view.setBackgroundColor(color)
super.onViewCreated(view, savedInstanceState)
}
}