2011-04-07 58 views
4

问题:仅文字颜色的HTC Desire HD的失败

我的应用程序适用于大多数设备很好,但在HTC Desire HD的,崩溃(安卓2.2.1)。 (编辑:错误依然存在于2.3.3上)

异常类 - android.content.res.Resources$NotFoundException

源法 - Resources.loadColorStateList()

详细信息:

我使用的主题设定文字颜色。我宣布在布局XML文件中的TextView的文字颜色...

<TextView 
    android:id="@+id/accountWarning" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/accountWarning" 
    android:textSize="20sp" 
    android:layout_marginTop="10dp" 
    android:padding="10dp" 
    android:textColor="?textColor"/> 

,并宣告文字颜色为每个主题应该在资源主题文件是什么?

<style name="Theme.TxtoolsDark" parent="Theme"> 
    <item name="textColor">#FFFFFF</item> 
    <item name="autoCompleteTextViewTextColor">#000</item>  
</style> 

<style name="Theme.TxtoolsLight" parent="Theme" > 
    <item name="textColor">#000</item> 
    <item name="autoCompleteTextViewTextColor">#000</item> 
</style> 

如果我只是在我的xml文件中对textColor进行硬编码,它工作正常,所以它似乎无法理解'?textColor'应该让它看起来像我的themes.xml文件。再次,这在我测试过的其他设备上正常工作,但在HTC Desire HD上失败。

错误:

堆栈跟踪是相关的位......

android.view.InflateException: Binary XML file line #10: Error inflating class <unknown> 

Caused by: android.content.res.Resources$NotFoundException: File res/drawable-hdpi/scrollbar_handle_vertical.9.png from drawable resource ID #0x0: .xml extension required 
at android.content.res.Resources.loadColorStateList(Resources.java:1842) 
at android.content.res.TypedArray.getColorStateList(TypedArray.java:342) 
at android.widget.TextView.<init>(TextView.java:665) 

编辑:的Eclipse 3.5.2报告给我“无法解析我的layout.xml的图形布局选项卡中属性“textColor”中的“?textColor”颜色值。不过,我仍然可以编译和构建,但它仍然可以在HTC Desire HD以外的其他设备上使用。完整的代码在这个问题的底部。

编辑:2011年7月1日

我已经注意到,我有两个独立的堆栈跟踪(虽然它仅是附近的变化,我认为年底1号线)...

java.lang.RuntimeException: Unable to resume activity {uk.co.txttools.mobile.android.txttoolsmobile/uk.co.txttools.mobile.android.txttoolsmobile.pages.home.HomeTabs}: java.lang.RuntimeException: Unable to resume activity {uk.co.txttools.mobile.android.txttoolsmobile/uk.co.txttools.mobile.android.txttoolsmobile.pages.home.StandardHome}: android.view.InflateException: Binary XML file line #10: Error inflating class <unknown> 
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3399) 
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3420) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864) 
at android.app.ActivityThread.access$2300(ActivityThread.java:136) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2179) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:143) 
at android.app.ActivityThread.main(ActivityThread.java:5073) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:521) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.RuntimeException: Unable to resume activity {uk.co.txttools.mobile.android.txttoolsmobile/uk.co.txttools.mobile.android.txttoolsmobile.pages.home.StandardHome}: android.view.InflateException: Binary XML file line #10: Error inflating class <unknown> 
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3399) 
at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:170) 
at android.app.LocalActivityManager.dispatchResume(LocalActivityManager.java:521) 
at android.app.ActivityGroup.onResume(ActivityGroup.java:58) 
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1260) 
at android.app.Activity.performResume(Activity.java:4011) 
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3389) 
... 12 more 
Caused by: android.view.InflateException: Binary XML file line #10: Error inflating class <unknown> 
at android.view.LayoutInflater.createView(LayoutInflater.java:513) 
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:618) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:407) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:217) 
at android.app.Activity.setContentView(Activity.java:1701) 
at uk.co.txttools.mobile.android.txttoolsmobile.pages.home.Home.createHomePage(Home.java:88) 
at uk.co.txttools.mobile.android.txttoolsmobile.pages.home.StandardHome.createHomePage(StandardHome.java:74) 
at uk.co.txttools.mobile.android.txttoolsmobile.pages.home.Home.onResume(Home.java:291) 
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1260) 
at android.app.Activity.performResume(Activity.java:4011) 
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3389) 
... 18 more 
Caused by: java.lang.reflect.InvocationTargetException 
at android.widget.TextView.<init>(TextView.java:355) 
at java.lang.reflect.Constructor.constructNative(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:446) 
at android.view.LayoutInflater.createView(LayoutInflater.java:500) 
... 33 more 
Caused by: android.content.res.Resources$NotFoundException: File res/drawable-hdpi/scrollbar_handle_vertical.9.png from drawable resource ID #0x0: .xml extension required 
at android.content.res.Resources.loadColorStateList(Resources.java:1842) 
at android.content.res.TypedArray.getColorStateList(TypedArray.java:342) 
at android.widget.TextView.<init>(TextView.java:665) 
... 37 more 

java.lang.RuntimeException: Unable to resume activity {uk.co.txttools.mobile.android.txttoolsmobile/uk.co.txttools.mobile.android.txttoolsmobile.pages.home.HomeTabs}: java.lang.RuntimeException: Unable to resume activity {uk.co.txttools.mobile.android.txttoolsmobile/uk.co.txttools.mobile.android.txttoolsmobile.pages.home.StandardHome}: android.view.InflateException: Binary XML file line #10: Error inflating class <unknown> 
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2485) 
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2506) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1856) 
at android.app.ActivityThread.access$1500(ActivityThread.java:132) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:143) 
at android.app.ActivityThread.main(ActivityThread.java:4293) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.RuntimeException: Unable to resume activity {uk.co.txttools.mobile.android.txttoolsmobile/uk.co.txttools.mobile.android.txttoolsmobile.pages.home.StandardHome}: android.view.InflateException: Binary XML file line #10: Error inflating class <unknown> 
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2485) 
at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:170) 
at android.app.LocalActivityManager.dispatchResume(LocalActivityManager.java:521) 
at android.app.ActivityGroup.onResume(ActivityGroup.java:58) 
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1242) 
at android.app.Activity.performResume(Activity.java:4004) 
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2475) 
... 12 more 
Caused by: android.view.InflateException: Binary XML file line #10: Error inflating class <unknown> 
at android.view.LayoutInflater.createView(LayoutInflater.java:518) 
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:626) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:408) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:231) 
at android.app.Activity.setContentView(Activity.java:1742) 
at uk.co.txttools.mobile.android.txttoolsmobile.pages.home.Home.createHomePage(Home.java:88) 
at uk.co.txttools.mobile.android.txttoolsmobile.pages.home.StandardHome.createHomePage(StandardHome.java:74) 
at uk.co.txttools.mobile.android.txttoolsmobile.pages.home.Home.onResume(Home.java:291) 
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1242) 
at android.app.Activity.performResume(Activity.java:4004) 
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2475) 
... 18 more 
Caused by: java.lang.reflect.InvocationTargetException 
at java.lang.reflect.Constructor.constructNative(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:415) 
at android.view.LayoutInflater.createView(LayoutInflater.java:505) 
... 33 more 
Caused by: android.content.res.Resources$NotFoundException: Resource is not a   ColorStateList (color or path): TypedValue{t=0x2/d=0x7f010001 a=-1} 
at android.content.res.Resources.loadColorStateList(Resources.java:1822) 
at android.content.res.TypedArray.getColorStateList(TypedArray.java:342) 
at android.widget.TextView.<init>(TextView.java:693) 
at android.widget.TextView.<init>(TextView.java:382) 
... 36 more 

编辑:7月4日 - 全码

的themes.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Theme" parent="android:Theme"> 
    </style> 

    <style name="Theme.TxtoolsDark" parent="Theme"> 
     <item name="textColor">#FFFFFF</item> 
     <item name="autoCompleteTextViewTextColor">#000</item> 
    </style> 

    <style name="Theme.TxtoolsLight" parent="Theme" > 
     <item name="textColor">#000</item> 
     <item name="autoCompleteTextViewTextColor">#000</item> 
    </style> 

</resources> 

attrs.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="autoCompleteTextViewTextColor" format="reference|color" /> 
    <attr name="textColor" format="reference|color" /> 
</resources> 

myLayoutFile。XML

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView android:id="@+id/ScrollView01" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       xmlns:android="http://schemas.android.com/apk/res/android"> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:scrollbars="vertical" android:scrollbarAlwaysDrawVerticalTrack="true"> 
    <TextView 
     android:id="@+id/accountWarning" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/accountWarning" 
     android:textSize="20sp" 
     android:layout_marginTop="10dp" 
     android:padding="10dp" 
     android:textColor="?textColor"/> 
    <TextView 
     android:id="@+id/haveAccountQuestion" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/haveAccountQuestion" 
     android:textSize="20sp" 
     android:layout_gravity="center_horizontal" 
     android:padding="10dp" 
     android:textColor="?textColor"/> 
    <Button 
     android:id="@+id/yes" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="10dp" 
     android:width="80dp" 
     android:text="@string/yesHappy" 
     android:textSize="15sp" 
     android:layout_gravity="center_horizontal"/> 
    <Button 
     android:id="@+id/no" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="10dp" 
     android:width="80dp" 
     android:text="@string/noSad" 
     android:textSize="15sp" 
     android:layout_gravity="center_horizontal" 
     android:layout_marginTop="10dp"/> 
    <ListView android:id="@android:id/list" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:cacheColorHint="#00000000"/> 
</LinearLayout> 
</ScrollView> 

编辑:5日2011年7月我发现,如果我使用“机器人:textColorPrimary”而不是“文字颜色”,错误不再出现在HTC Desire HD的,但文字颜色将始终保持系统textColor默认。在所有设备上,它可以按预期完美工作。

编辑:2011年7月6日清晨基本上,HTC Desire HD似乎忽略用'?'设置的任何值。尽管在上次编辑中描述了一半修复,但我稍后在使用样式的页面上的应用程序中遇到了错误。

编辑:2011年7月6日午后我有一半通过粗略设置Java中的文本颜色(取决于主题)来解决问题。但是,这还不适用于我的ListView中使用'样式'的文本。不过,我现在发现,尽管使用'?textColor',我的程序的其余部分仍可以正常工作!这意味着只有开幕式的屏幕无法正常工作,这表明HTC Desire HD并不足以及早创造出足够的主题或风格来破解'textColor'! (或类似的东西!)这可能是至关重要的信息!我可以在我的代码中调换任何东西来使其工作吗?

回答

0

我最终选择通过修改我的一些xml和Java文件来解决这个问题。这并不理想,因为它会在代码中造成不一致,并且会过分复杂化主题。然而,为了迎合HTC Desire HD用户,我已经屈服于它。如果有人可以找到替代解决方案,请在此处发布。

宽泛地说,我定我的代码通过Java静态方法,如本内设置文本颜色...

public static void setTextColor(TextView tv) { 

    if (CURRENT_THEME==TXTTOOLS_LIGHT){ 
     tv.setTextColor(Color.BLACK); 
    } 
    else if (CURRENT_THEME==TXTTOOLS_DARK){ 
     tv.setTextColor(Color.WHITE); 
    } 
} 

或创建(每个文本颜色之一)styles.xml内的各种风格和在Java代码中调用相关的代码。

SimpleCursorAdapter logins; 
if (Theme.getTheme()==Theme.TXTTOOLS_LIGHT){ 
    logins = new SimpleCursorAdapter(this, R.layout.username_row_light_theme, c, from, to);  
} 
else if (Theme.getTheme()==Theme.TXTTOOLS_DARK){ 
    logins = new SimpleCursorAdapter(this, R.layout.username_row_dark_theme, c, from, to); 
} 
0

此片段不是必需的。主题应该在没有明确指定布局中的样式的情况下生效。

android:textColor="?textColor" 
+0

感谢您的答复吉姆!它不工作,我害怕寿。如果我删除该行,文本将返回到默认颜色。如果我从几个月前写这个的时候就没有记错,它需要声明**“?textColor”**以确保它使用主题作为文本颜色。当然,它可以在我尝试过的所有设备上正常工作(如果我保留此片段)。我想知道我是否设置了与你想象不同的东西?任何其他想法?谢谢。 – 2011-04-07 13:41:42

+0

(在上面的评论,我的意思是说,原来的代码,我已经试过了所有*其他*设备正常工作)。 – 2011-04-08 09:24:01

+0

凹凸。这仍然是一个问题。有没有人有更多的建议?谢谢。 – 2011-04-11 09:38:41

0

“?”语法是引用当前主题中的样式,您是否在Manifest中设置了主题?我没有在你提供的代码中看到它,所以我假设它是否已设置,它在那里完成。 (这也许是其他Jim评论的原因 - 你的回应表明它没有被设置)。

此外,你已经定义了一个“textColor”属性两次 - 一次在themes.xml中,一次在attrs.xml中。任何设备如何知道您指的是哪一个?因为你正在使用“?”语法,系统应该知道寻找一个样式属性,但我不认为它显式检查资源类型。实际上,有效的语法包括资源类型,它可能有助于具有“?style/textColor”。另外,请尝试调用另一个“attrTextColor”以区分它和主题中的“textColor”属性。 (另外,“textColor”在我看来似乎是一个不好的属性名称,因为它可能与属性“android:textColor”混淆 - 也许你应该将其命名为“txtoolsTextColor”或其他东西。由于系统应该知道要看你的包对于“textColor”资源,它真的不应该...除了你有一个bug,这可能是原因...)

+0

嗨,吉姆,为您的回应欢呼!也许我没有明确的是,应用程序的主题是由用户选择的。目前有两种选择;一个轻的和一个黑暗的。因此,主题不在清单文件中设置,它由用户在应用程序的“首选项”屏幕上选择,并在Java中用此代码设置 - activity.setTheme(R.style.Theme_TxttoolsLight);关于您的themes.xml/attrs.xml查询,每个主题的颜色在themes.xml中定义,而需要attrs.xml来声明主题中的属性。 attrs.xml不定义颜色本身。 – 2011-08-08 08:10:16

0

最近我遇到了类似的问题。对于只有银河S 4G充气视图时,我收到以下错误:

Caused by: android.content.res.Resources$NotFoundException: File res/drawable-hdpi/scrollbar_handle_vertical.9.png from drawable resource ID #0x0: .xml extension required 

此错误代码是非常无益的,它原来是更有用看堆栈跟踪的顶部,在那里我发现:

ComponentInfo{com.staircase3.opensignal/com.staircase3.opensignal.library.Tab_Overview}: android.view.InflateException: Binary XML file line #804: Error inflating class </code> 

然后看着在行804所讨论的XML文件,我发现它与Android的设置问题:cacheColorHint。虽然我有一个自定义主题,但它并不适用于我的ListView,并且cacheColorHint只是简单的硬编码。修复很简单,就像上面在java:listview.setCacheColorHint中动态设置它一样。

它似乎在java中的某些观点变量,而不是XML往往导致更少的问题,也有瓷砖位图中的错误也由seeting瓦性能dynamicallyr粥比Java的解决(见XML drawable Bitmap tileMode bug?

对于某些手机和布局模型,似乎好像对所有XML进行解码之前的布局都是膨胀的。但这是猜想,或者至少是探讨这些问题的启发式方法。

1

你提到你的意见,你是在活动呼吁setTheme,而不是设置主题,在该清单的活动。请确保在super.onCreate调用之前调用setTheme,并在该Activity的onCreate生命周期方法中调用setContent调用。这将防止在主题之前使用任何默认主题。

我怀疑正在发生的事情是,你在你的布局XML使用“?文字颜色”,但是这个值只在您的自定义主题,并在某些设备上的默认主题definied。其他设备在默认主题中没有定义的值。

的错误消息是越来越摆在那里的一些值,它最终要解决,不能用作文本​​颜色的资源。文本颜色通常是一个XML状态列表,它指定了用于某些状态的颜色,例如焦点状态,但如果您希望所有状态的颜色相同,则有时会使用直接颜色资源。

就像我在其他评论中提到的,我见过的大多数主题不直接有文字颜色值。相反,他们有一个textViewStyle指向一个样式,然后有一个textColor。如果你想影响更多的东西,你可能想尝试colorForeground。通常textViewStyle将为textColor指定一个XML状态列表文件,然后它将使用colorForeground作为某些状态的颜色。

相关问题