As it wasn't possible to submit a new post to the existing/old conversation
using the web interface I am copying the message here with Danilo's
permission:

Hi Mariano.

Did you manage to work using themes from drawables xml?
I have same problem and there is no any reference but this thread and
there is no solution here.
If you find solution please let me know.

I currently "solved" it by using different drawable xml for every
theme but as you can see this isn't a god solution at all.

About your question about getting a color from a theme (I know its old
but for future readers :) ) solution I created is like this:

       private static int getColor(final Context context, final int id,
final int defaultColor) {
               try {
                       final Theme theme = context.getTheme();
                       if (theme == null) {
                               return defaultColor;
                       }
                       TypedValue typedValue = new TypedValue();

                       if (theme.resolveAttribute(id, typedValue, false)) {
                               final Resources resources =
context.getResources();
                               final int resourceId = typedValue.resourceId;
                               if (typedValue.type ==
TypedValue.TYPE_INT_COLOR_RGB8 ||
typedValue.type == TypedValue.TYPE_INT_COLOR_RGB4 || typedValue.type
== TypedValue.TYPE_INT_COLOR_ARGB4
                                               || typedValue.type ==
TypedValue.TYPE_INT_COLOR_ARGB8 ||
typedValue.type == TypedValue.TYPE_FIRST_COLOR_INT) {
                                       return typedValue.data;
                               } else {
                                       return
resources.getColor(resourceId);
                               }
                       }
                       return defaultColor;
               } catch (NotFoundException e) {
                       // TODO Auto-generated catch block
                       e.printStackTrace();
                       return defaultColor;
               }
       }

On Tue, May 11, 2010 at 9:08 AM, Mariano Kamp <mariano.k...@gmail.com>wrote:

> Hi Dianne.
>
> Thanks very much, almost there.
>
> I understand the procedure, it would do what I want, but I run into an
> exception:
>
> D/NewsRobDefaultExceptionHandler( 1839): Caused by:
> java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
> D/NewsRobDefaultExceptionHandler( 1839): at
> android.content.res.TypedArray.getColor(TypedArray.java:273)
> D/NewsRobDefaultExceptionHandler( 1839): at
> android.graphics.drawable.GradientDrawable.inflate(GradientDrawable.java:647)
> D/NewsRobDefaultExceptionHandler( 1839): at
> android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:788)
> D/NewsRobDefaultExceptionHandler( 1839): at
> android.graphics.drawable.Drawable.createFromXml(Drawable.java:729)
> D/NewsRobDefaultExceptionHandler( 1839): at
> android.content.res.Resources.loadDrawable(Resources.java:1690)
>
> This happens when using it the way we described here in a drawable xml.
> However to better understand the error I used it on other attributes and
> when using it on the background attribute of a View it works. Maybe this
> approach is incompatible with drawables that are expressed in xml?
>
> Btw. Is there any way to get the actual #rgb string for a color from a
> theme?
>
> Cheers,
> Mariano
>
> On Tue, May 11, 2010 at 8:02 AM, Dianne Hackborn <hack...@android.com>wrote:
>
>> You need to define an attribute for your value:
>>
>> <attr name="myColor" format="color" />
>>
>> Then make a custom theme that supplies a value for it:
>>
>> <style name="MyTheme" parent="android:Theme">
>>     <item name="com.my.package:myColor">#ff808080</item>
>> </style>
>>
>>  And now you can reference that value from other XML:
>>
>> <shape xmlns:android="http://schemas.android.com/apk/res/android
>>
>> "
>>         android:shape="rectangle">
>>     <gradient android:startColor="?com.my.package:myColor"
>>
>>             android:endColor="#66FFFFFF"
>>             android:angle="270" />
>> </shape>
>>
>>
>> Note that "com.my.package" is your manifest's package name.
>>
>> Also I just wrote this by hand so I won't guarantee it is completely
>> right. :}
>>
>> On Mon, May 10, 2010 at 11:02 AM, Mariano Kamp <mariano.k...@gmail.com>wrote:
>>
>>> Hmmh, also no answer to this question on themes. Maybe the answer cannot
>>> be given with two lines? So let me explain what I would expect step by step
>>> and you stop me were I deviate from the Golden Path? I'll try yes/no
>>> questions.
>>>
>>> In the simplest terms I would expect that in every place I can specify a
>>> color in RGB (#ffff) I could also specify a symbolic name instead. This
>>> should work like @color/xyz, but with one more level of indirection that
>>> lets me switch between themes, like dark and light.
>>>
>>> Is that possible?
>>>
>>> I would expect those themes to be applicable to (a) widgets, (b)
>>> drawables (see the mentioned example) and (c) when I need to style something
>>> myself like HTML. Are (a) - (c) possible?
>>>
>>> Furthermore I would expect that I could define style keys myself, but I
>>> got the impression that only keys from the "android" namespace can be used?
>>> That lead me to believe that you can't define abstract colors, but only
>>> styles for specific attributes used in the widgets' implementations.
>>>
>>> And again, if there is any meaningful documentation I would be happy to
>>> read it. Just send me the link or name of the book.
>>>
>>>
>>> On Sat, May 8, 2010 at 3:26 PM, Mariano Kamp <mariano.k...@gmail.com>wrote:
>>>
>>>> Hi,
>>>>
>>>> I have trouble 
>>>> (example<http://groups.google.com/group/android-developers/browse_thread/thread/5b4ce3e49a1b63d2/>)
>>>> wrapping my head around styles/themes. Can somebody help me or point me to
>>>> actual documentation?
>>>>
>>>> Let's say I have a drawable that I want to use as the background of a
>>>> layout:
>>>>
>>>> <shape xmlns:android="http://schemas.android.com/apk/res/android";
>>>>         android:shape="rectangle">
>>>>         <gradient android:startColor="#9F9FA4" android:endColor="#66FFFFFF"
>>>>                 android:angle="270" />
>>>> </shape>
>>>>
>>>>
>>>> Now I want to have a dark and a light theme. Depending on the chosen theme 
>>>> I want to have a different value for startColor and endColor. How do I do 
>>>> that? I am aware of extending themes, but what do I put into the items? 
>>>> How do I reference those new values then?
>>>>
>>>>
>>>> Cheers,
>>>>
>>>> Mariano
>>>>
>>>>
>>>  --
>>> You received this message because you are subscribed to the Google
>>> Groups "Android Developers" group.
>>> To post to this group, send email to android-developers@googlegroups.com
>>> To unsubscribe from this group, send email to
>>> android-developers+unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com>
>>> For more options, visit this group at
>>> http://groups.google.com/group/android-developers?hl=en
>>>
>>
>>
>>
>> --
>> Dianne Hackborn
>> Android framework engineer
>> hack...@android.com
>>
>> Note: please don't send private questions to me, as I don't have time to
>> provide private support, and so won't reply to such e-mails.  All such
>> questions should be posted on public forums, where I and others can see and
>> answer them.
>>
>>  --
>> You received this message because you are subscribed to the Google
>> Groups "Android Developers" group.
>> To post to this group, send email to android-developers@googlegroups.com
>> To unsubscribe from this group, send email to
>> android-developers+unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com>
>> For more options, visit this group at
>> http://groups.google.com/group/android-developers?hl=en
>>
>
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to