Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to get background color from current theme programmatically

Tags:

android

I tried something like this, but i stuck:

TypedValue typedValue = new TypedValue(); 
if (this.parentActivity.getTheme().resolveAttribute(android.R.attr.windowBackground, typedValue, true))
{
  // how to get color?
}
like image 722
Bartłomiej Mucha Avatar asked Sep 11 '12 18:09

Bartłomiej Mucha


3 Answers

You can get the background color (or Drawable) from the current theme by:

TypedValue a = new TypedValue();
getTheme().resolveAttribute(android.R.attr.windowBackground, a, true);
if (a.isColorType()) {
    // windowBackground is a color
    int color = a.data;
} else {
    // windowBackground is not a color, probably a drawable
    Drawable d = activity.getResources().getDrawable(a.resourceId);
}

isColorType was introduced in API level 29. Before then, you can use the following instead:

if (a.type >= TypedValue.TYPE_FIRST_COLOR_INT && a.type <= TypedValue.TYPE_LAST_COLOR_INT)
like image 110
ashughes Avatar answered Nov 11 '22 10:11

ashughes


You can get the resources of your Theme by using :

TypedArray a = getTheme().obtainStyledAttributes(R.style.ThemeName, new int[] {R.attr.attribute_name});     
int attributeResourceId = a.getResourceId(0, 0);
like image 25
Swayam Avatar answered Nov 11 '22 12:11

Swayam


for your qoustion the easiest way is:

TypedValue typedValue = new TypedValue(); 
if (this.parentActivity.getTheme().resolveAttribute(android.R.attr.windowBackground, typedValue, true))
{
  // how to get color?
  int colorWindowBackground = typedValue.data;// **just add this line to your code!!**
}
like image 6
batsheva Avatar answered Nov 11 '22 10:11

batsheva