Nice!
Lots of good tidbits on style in that response :)

I'll try rewriting it as suggested and see if that helps.
Unfortunately I'm unable to reproduce locally, so ill have to through
it out in the wild again.

- Brill Pappin

On Jan 16, 3:39 pm, Dianne Hackborn <hack...@android.com> wrote:
> textSize is not defined in the platform's base theme.
>
> These are the text size-related attributes in the theme:
>
>            <!-- Default appearance of text: color, typeface, size, and
> style. -->
>
>         <attr name="textAppearance" format="reference" />
>
>         <!-- Default appearance of text against an inverted background:
>
>              color, typeface, size, and style. -->
>
>         <attr name="textAppearanceInverse" format="reference" />
>
>         <!-- Text color, typeface, size, and style for "large" text.
> Defaults to primary text color. -->
>
>         <attr name="textAppearanceLarge" format="reference" />
>
>         <!-- Text color, typeface, size, and style for "medium" text.
> Defaults to primary text color. -->
>
>         <attr name="textAppearanceMedium" format="reference" />
>
>         <!-- Text color, typeface, size, and style for "small" text.
> Defaults to secondary text color. -->
>
>         <attr name="textAppearanceSmall" format="reference" />
>
>         <!-- Text color, typeface, size, and style for "large" inverse text.
> Defaults to primary inverse text color. -->
>
>         <attr name="textAppearanceLargeInverse" format="reference" />
>
>         <!-- Text color, typeface, size, and style for "medium" inverse
> text. Defaults to primary inverse text color. -->
>
>         <attr name="textAppearanceMediumInverse" format="reference" />
>
>         <!-- Text color, typeface, size, and style for "small" inverse text.
> Defaults to secondary inverse text color. -->
>
>         <attr name="textAppearanceSmallInverse" format="reference" />
>
> So the textSize attribute is rarely set as part of the base platform, except
> inside of a TextAppearance style:
>
> http://developer.android.com/reference/android/R.styleable.html#TextA...
>
> So generally I wouldn't expect that code to work, unless textSize has been
> explicitly supplied by you in a theme.  Instead, you need to retrieve the
> resource of the TextAppearance size you want, and then can retrieve the
> textSize from that.
>
> That said, what *should* happen is you just get the default value you passed
> in, because the theme doesn't hold its own value.  You should never get a
> crash.  The obtainStyledAttributes() method is supposed to build an array of
> values that corresponds to the array you passed in to it.  So a crash like
> this is completely independent of whatever is defined in the theme, and just
> an outright bug in whatever platform code it is running on.
>
> Also your code has another issue where it is using array.getResourceId() --
> once you do get down to the TextAppearance, generally the values there are
> literals, not references to other resources.  So this also will always fail
> (it doesn't have a resource id), even if textSize does have a value, again
> resulting in you getting your default value.  You should just call
> getDimensionPixelSize() with the array offset at which you want to retrieve
> your value -- 0 in your case.
>
> Oh.
>
> That is probably the crash. :)  If for some reason there *is* some value for
> textSize, if getResourceId() returns non-0, then you will pass a value > 0
> to getDimensionPixelSize(), which is outside the array you originally passed
> in.
>
>
>
>
>
> On Sun, Jan 16, 2011 at 9:24 AM, Brill Pappin <br...@pappin.ca> wrote:
> > I'm getting this exception:
>
> > java.lang.ArrayIndexOutOfBoundsException
> > at
> > android.content.res.TypedArray.getDimensionPixelSize(TypedArray.java:455)
>
> > from this code:
>
> >                 TypedArray array = 
> > context.getTheme().obtainStyledAttributes(style,
> > new int[] { android.R.attr.textSize });
>
> > int textSize = array.getDimensionPixelSize(array.getResourceId(0, 0),
> > defValue);
>
> > I'm expecting a standard value from the system since thats what I'm asking
> > for.
>
> > It actually works on all devices I can get my hands on and of course the
> > error reporting doesn't tell me anything useful except a stack trace.
>
> > Does anyone have a solution that might work instead of this one?
>
> > Does anyone know what device this might be?
>
> > I do know that it has to be a 2.2 device or better because I've made the
> > minimum 2.2 (froyo)
>
> > At the moment the only idea I can come up with is to simply send a static
> > value, but I'm obviously going to have to guess what the device is.
>
> >  --
> > 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%2Bunsubs 
> > cr...@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
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to