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

Reply via email to