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#TextAppearance 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%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 For more options, visit this group at http://groups.google.com/group/android-developers?hl=en