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 <[email protected]>
> To: [email protected]
> 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 [email protected]
> > To unsubscribe from this group, send email to
> > [email protected]
> > 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 [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> 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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en