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