Lance, Digging further showed that it was the problem with my "theme customization".
The default "preference_category.xml" is referring to "listSeparatorTextViewStyle" as its style. But I've customized the "listSeparatorTextViewStyle" and for whatever reason it does not correctly inherit the "layout_width" and "layout_hight" attributes from Android default theme. In my "themes.xml": <item name="android:listSeparatorTextViewStyle">@style/Widget.TextView.ListSeparator</item> In my "styles.xml": <style name="Widget.TextView.ListSeparator" parent="android:Widget.TextView.ListSeparator"> <item name="android:background">@drawable/blue_header</item> </style> Solution: I just copied all the attributes from Android default "Widget.TextView.ListSeparator" and the problem got fixed! No other changes, including the ones I just mentioned in my previous reply, are needed: <style name="Widget.TextView.ListSeparator" parent="android:Widget.TextView"> <item name="android:background">@drawable/blue_header</item> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">25dip</item> <item name="android:textStyle">bold</item> <item name="android:textColor">?android:attr/textColorSecondary</item> <item name="android:textSize">14sp</item> <item name="android:gravity">center_vertical</item> <item name="android:paddingLeft">5sp</item> </style> And I guess this is the final solution for those whom want to customize their "ListView"s (and the related separator). But I still can't understand why this occurs when the build/packaging platform is not the same as the deployment one. Hope someone from Android engineering team answers me. Best Regards, Armond ----- Original Message ---- > From: Armond Avanes <armond...@yahoo.com> > To: android-developers@googlegroups.com > Sent: Wed, November 4, 2009 2:00:50 PM > Subject: Re: [android-developers] Re: Problem running a > compiled/packaged-with-v1.6 application on v1.5 > > Lance, Thanks for your reply. > > Finally I could track down the problem. "" was the root of > the issue! For whatever reason, that exception occurs when I build against > v1.6 > and run it under v1.5 or when I build it against v1.5 and run it under > v1.6... > The problem vanishes when I remove my PreferenceCategory's from > "preferences.xml". > > Can you reproduce this with your code? > > As for the cause, when I tracked it even further, I found out that when a > is inflated using the default layout, it's using > "preference_category.xml" layout from platform (you can find it under > "/platforms/android-1.x/data/res/layout"). You'll find the > following block inside the file (both for v1.5 and v1.6): > > > style="?android:attr/listSeparatorTextViewStyle" > android:id="@+android:id/title" > /> > > And obviously it includes neither "layout_height" not "layout_width" > attribute! > As a solution (maybe temporary!), I copied this file to my project's > "layout/" > directory and added the above missing parameters to it. And in my > "preferences.xml" I assigned android:layout="@layout/preference_category" > attribute to all of the tags. The problem resolved!!! > > But I'm still in wonder with such missing parameter, why it works flawlessly > when I build and run the project under the same Android version?? > > Best Regards, > Armond > > > > > ----- Original Message ---- > > From: Lance Nanek > > To: Android Developers > > Sent: Wed, November 4, 2009 3:44:20 AM > > Subject: [android-developers] Re: Problem running a > compiled/packaged-with-v1.6 application on v1.5 > > > > Hmm, I have an app that similarly uses a PreferenceActivity and build > > target 1.6, but it runs fine on the 1.5 emulator. I wonder what we are > > doing different. > > > > Is your activity just the basic form like this? > > public class Preferences extends PreferenceActivity { > > @Override > > protected void onCreate(Bundle savedInstanceState) { > > super.onCreate(savedInstanceState); > > addPreferencesFromResource(R.xml.preferences); > > } > > } > > > > Are you calling Preference#setLayoutResource in any way? Seems like > > that could change the XML file being used. I think I found the default > > one in the Android source, but don't see the missing attribute in it. > > > > On Nov 3, 5:03 pm, "Armond Avanes" wrote: > > > Hi Guys, > > > > > > I have an application which is based Android 1.5 but for enabling > > > different > > > screen types support I have to compile and package it with v1.6. When I > > > install and run the resulted APK on my 1.5 emulator, everything works fine > > > except that "Preferences" activity crashes every time I launch it! > > > > > > When I revert back my API dependency to 1.5 and remove a few 1.6 specific > > > config blocks from AndroidManifest.xml and compile/package it with 1.5, > > > everything works just fine!! > > > > > > Below is the exception I get when it crashes. I will highly appreciate any > > > help on this: > > > > > > D/AndroidRuntime( 985): Shutting down VM > > > W/dalvikvm( 985): threadid=3: thread exiting with uncaught exception > > > (group=0x4000fe70) > > > E/AndroidRuntime( 985): Uncaught handler: thread main exiting due to > > > uncaught exception > > > E/AndroidRuntime( 985): java.lang.RuntimeException: Binary XML file line > > > #18: You must supply a layout_width attribute. > > > E/AndroidRuntime( 985): at > > > android.content.res.TypedArray.getLayoutDimension(TypedArray.java:438) > > > E/AndroidRuntime( 985): at > > > android.view.ViewGroup$LayoutParams.setBaseAttributes(ViewGroup.java:3319) > > > E/AndroidRuntime( 985): at > > > android.view.ViewGroup$LayoutParams.(ViewGroup.java:3274) > > > E/AndroidRuntime( 985): at > > > android.widget.AbsListView$LayoutParams.(AbsListView.java:3242) > > > E/AndroidRuntime( 985): at > > > android.widget.AbsListView.generateLayoutParams(AbsListView.java:3123) > > > E/AndroidRuntime( 985): at > > > android.widget.AbsListView.generateLayoutParams(AbsListView.java:69) > > > E/AndroidRuntime( 985): at > > > android.view.LayoutInflater.inflate(LayoutInflater.java:395) > > > E/AndroidRuntime( 985): at > > > android.view.LayoutInflater.inflate(LayoutInflater.java:320) > > > E/AndroidRuntime( 985): at > > > android.preference.Preference.onCreateView(Preference.java:412) > > > E/AndroidRuntime( 985): at > > > android.preference.Preference.getView(Preference.java:389) > > > E/AndroidRuntime( 985): at > > > android.preference.PreferenceGroupAdapter.getView(PreferenceGroupAdapter.jav > > > a:187) > > > E/AndroidRuntime( 985): at > > > android.widget.AbsListView.obtainView(AbsListView.java:1269) > > > E/AndroidRuntime( 985): at > > > android.widget.ListView.makeAndAddView(ListView.java:1623) > > > E/AndroidRuntime( 985): at > > > android.widget.ListView.fillDown(ListView.java:607) > > > E/AndroidRuntime( 985): at > > > android.widget.ListView.fillFromTop(ListView.java:664) > > > E/AndroidRuntime( 985): at > > > android.widget.ListView.layoutChildren(ListView.java:1481) > > > E/AndroidRuntime( 985): at > > > android.widget.AbsListView.onLayout(AbsListView.java:1113) > > > E/AndroidRuntime( 985): at > > > android.view.View.layout(View.java:6133) > > > E/AndroidRuntime( 985): at > > > android.widget.FrameLayout.onLayout(FrameLayout.java:333) > > > E/AndroidRuntime( 985): at > > > android.view.View.layout(View.java:6133) > > > E/AndroidRuntime( 985): at > > > android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119) > > > E/AndroidRuntime( 985): at > > > android.widget.LinearLayout.layoutVertical(LinearLayout.java:998) > > > E/AndroidRuntime( 985): at > > > android.widget.LinearLayout.onLayout(LinearLayout.java:918) > > > E/AndroidRuntime( 985): at > > > android.view.View.layout(View.java:6133) > > > E/AndroidRuntime( 985): at > > > android.widget.FrameLayout.onLayout(FrameLayout.java:333) > > > E/AndroidRuntime( 985): at > > > android.view.View.layout(View.java:6133) > > > E/AndroidRuntime( 985): at > > > android.view.ViewRoot.performTraversals(ViewRoot.java:929) > > > E/AndroidRuntime( 985): at > > > android.view.ViewRoot.handleMessage(ViewRoot.java:1482) > > > E/AndroidRuntime( 985): at > > > android.os.Handler.dispatchMessage(Handler.java:99) > > > E/AndroidRuntime( 985): at android.os.Looper.loop(Looper.java:123) > > > E/AndroidRuntime( 985): at > > > android.app.ActivityThread.main(ActivityThread.java:3948) > > > E/AndroidRuntime( 985): at > > > java.lang.reflect.Method.invokeNative(Native Method) > > > E/AndroidRuntime( 985): at > > > java.lang.reflect.Method.invoke(Method.java:521) > > > E/AndroidRuntime( 985): at > > > com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:7 > > > 82) > > > E/AndroidRuntime( 985): at > > > com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) > > > E/AndroidRuntime( 985): at dalvik.system.NativeStart.main(Native > > > Method) > > > > > > Best Regards, > > > Armond > > > > -- > > 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 > > -- > 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 -- 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