2012-11-26 37 views
0

我有一個按鈕的佈局就可以了:錯誤膨脹按鈕

<Button 
    android:id="@+id/myapp_new" 
    style="@style/header_button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_centerVertical="true" 
    android:background="@drawable/header_button" 
    android:gravity="center" 
    android:text="new" /> 

該按鈕的風格被定義爲這樣的:

<style name="header_button" parent="@android:style/TextAppearance.Medium"> 
    <item name="android:textColor">@color/white</item> 
    <item name="android:textSize">16sp</item> 
</style> 

當我打開我的手機上這個活動,我收到崩潰。

setContentView(R.layout.layout_tags); 

如果我刪除android:background參數,崩潰消失:設置內容視圖行中的崩潰發生。我不明白,因爲drawable包含在應用程序中,並且在其他設備(包括模擬器)上正常工作。

我會在此主題底部發布錯誤日誌。

正如我所說的,這次崩潰只發生在我的一個設備上(我有2 +模擬器)。它發生在運行Android 2.2.1的舊手機上,但不會出現在我的模擬器(運行2.2)或我的新手機(運行4.1.2)上。

最大的區別是我的設備與崩潰具有較低的屏幕分辨率。我在ldpi文件夾中沒有圖像。我的印象是Android會自動從下一個文件夾中選擇圖片。此外,我有很多其他圖像加載得很好。

我真的很想將我的應用程序發佈到Google Play商店,但這讓我難以忍受。我擔心這個崩潰會發生在其他人的手機上,儘管我只能在一臺設備上重現它。有沒有人有任何想法?我迷路了。

11-26 12:03:04.740: E/AndroidRuntime(2800): FATAL EXCEPTION: main 
11-26 12:03:04.740: E/AndroidRuntime(2800): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.app/com.myapp.app.activity.ActivityTags}: android.view.InflateException: Binary XML file line #65: Error inflating class android.widget.Button 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.os.Looper.loop(Looper.java:123) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at java.lang.reflect.Method.invoke(Method.java:521) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at dalvik.system.NativeStart.main(Native Method) 
11-26 12:03:04.740: E/AndroidRuntime(2800): Caused by: android.view.InflateException: Binary XML file line #65: Error inflating class android.widget.Button 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.view.LayoutInflater.createView(LayoutInflater.java:513) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:618) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.view.LayoutInflater.inflate(LayoutInflater.java:407) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.app.Activity.setContentView(Activity.java:1647) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at com.myapp.app.activity.ActivityTags.onCreate(ActivityTags.java:75) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  ... 11 more 
11-26 12:03:04.740: E/AndroidRuntime(2800): Caused by: java.lang.reflect.InvocationTargetException 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.widget.Button.<init>(Button.java:65) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at java.lang.reflect.Constructor.constructNative(Native Method) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at java.lang.reflect.Constructor.newInstance(Constructor.java:446) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.view.LayoutInflater.createView(LayoutInflater.java:500) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  ... 26 more 
11-26 12:03:04.740: E/AndroidRuntime(2800): Caused by: java.lang.StackOverflowError 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.graphics.drawable.StateListDrawable$StateListState.<init>(StateListDrawable.java:255) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.graphics.drawable.StateListDrawable.<init>(StateListDrawable.java:301) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.graphics.drawable.StateListDrawable.<init>(StateListDrawable.java:68) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:750) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.graphics.drawable.Drawable.createFromXml(Drawable.java:729) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.content.res.Resources.loadDrawable(Resources.java:1694) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.content.res.Resources.getDrawable(Resources.java:581) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:160) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:788) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.graphics.drawable.Drawable.createFromXml(Drawable.java:729) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.content.res.Resources.loadDrawable(Resources.java:1694) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.content.res.Resources.getDrawable(Resources.java:581) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:160) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:788) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.graphics.drawable.Drawable.createFromXml(Drawable.java:729) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.content.res.Resources.loadDrawable(Resources.java:1694) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.content.res.Resources.getDrawable(Resources.java:581) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:160) 
11-26 12:03:04.740: E/AndroidRuntime(2800):  at android.graphics.drawable.Drawable.createF 
+0

也許'android:id =「@ + id/new」'導致問題,因爲new是java中的保留關鍵字 –

+0

對不起,id實際上並不是「新」。我改變了它,因爲它包含我的應用程序的名稱(例如:myapp_new)。崩潰與設置背景有關。 – Andrew

+2

您是否使用StateListDrawable作爲背景?你可以發佈嗎? – brillenheini

回答

5

StackOverflowError例外,讓我覺得,你header_button背景依賴於自身,所以它的遞歸加載相同的文件,直到它死亡。

+0

這是問題所在。我的按鈕的圖像是'header_button.png',並且引用它的可繪製XML被稱爲'header_button.xml'。我改變了PNG的名稱,並解決了問題。 – Andrew

+0

太深了。虛無主義者甚至。 –

相關問題