2014-01-08 31 views
3

我在PlayStore的管理控制檯中出現了經常性崩潰。我看不出它爲什麼會崩潰。 我從來沒有重現這個崩潰,它似乎只來自三星Galaxy設備(不太確定雖然)。從SDK版本4.1 & 4.2 & 4.3TextView樣式ArrayIndexOutOfBoundsException

以下是完整的堆棧跟蹤:

android.view.InflateException: Binary XML file line #31: Error inflating class <unknown> 
at android.view.LayoutInflater.createView(LayoutInflater.java:613) 
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
at com.android.internal.widget.ActionBarContextView.initClose(ActionBarContextView.java:262) 
at com.android.internal.widget.ActionBarContextView.onConfigurationChanged(ActionBarContextView.java:136) 
at android.view.View.dispatchConfigurationChanged(View.java:7761) 
at android.view.ViewGroup.dispatchConfigurationChanged(ViewGroup.java:1056) 
at android.view.ViewGroup.dispatchConfigurationChanged(ViewGroup.java:1060) 
at android.view.ViewGroup.dispatchConfigurationChanged(ViewGroup.java:1060) 
at android.view.ViewGroup.dispatchConfigurationChanged(ViewGroup.java:1060) 
at android.view.ViewGroup.dispatchConfigurationChanged(ViewGroup.java:1060) 
at android.view.ViewRootImpl.updateConfiguration(ViewRootImpl.java:2800) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1509) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4464) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 
at android.view.Choreographer.doCallbacks(Choreographer.java:555) 
at android.view.Choreographer.doFrame(Choreographer.java:525) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 
at android.os.Handler.handleCallback(Handler.java:615) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4895) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.reflect.InvocationTargetException 
at java.lang.reflect.Constructor.constructNative(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
at android.view.LayoutInflater.createView(LayoutInflater.java:587) 
... 31 more 
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=24; index=691 
at android.content.res.StringBlock.get(StringBlock.java:64) 
at android.content.res.XmlBlock$Parser.getPooledString(XmlBlock.java:458) 
at android.content.res.TypedArray.loadStringValueAt(TypedArray.java:720) 
at android.content.res.TypedArray.getString(TypedArray.java:124) 
at android.widget.TextView.<init>(TextView.java:916) 
at android.widget.TextView.<init>(TextView.java:562) 
... 34 more 

我想也許它是由我給TextView風格(特別是在fontFamily中)引起的。因此,這裏是從我的價值觀V16> styles.xml(值-V16)風格:

<style name="TextViewHour"> 
     <item name="android:layout_width">wrap_content</item> 
     <item name="android:layout_height">wrap_content</item> 
     <item name="android:layout_marginLeft">5dip</item> 
     <item name="android:ellipsize">end</item> 
     <item name="android:maxLines">1</item> 
     <item name="android:textSize">@dimen/text_hour_size</item> 
     <item name="android:textColor">@color/item_hour</item> 
     <item name="android:fontFamily">sans-serif-condensed</item> 
     <item name="android:textStyle">bold</item> 
    </style> 

從值> styles.xml

<style name="TextViewHour"> 
     <item name="android:layout_width">wrap_content</item> 
     <item name="android:layout_height">wrap_content</item> 
     <item name="android:layout_marginLeft">5dip</item> 
     <item name="android:ellipsize">end</item> 
     <item name="android:maxLines">1</item> 
     <item name="android:textSize">@dimen/text_hour_size</item> 
     <item name="android:textColor">@color/item_hour</item> 
     <item name="android:textStyle">bold</item> 
    </style> 

這裏使用一個TextView的例子:

<TextView 
    style="@style/TextViewHour" 
    android:id="@+id/name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="@color/item_date_separator"/> 

我對於爲什麼我的應用程序在某些設備上崩潰沒有任何線索。 所以如果有人有一個想法,我都耳朵!

編輯:看來,它不僅在星系的設備,我也有這個崩潰適用於Nexus 7

+0

我在我的prod應用程序中也看到了一些崩潰。我下載了roboto字體並將它們加載到應用程序中,但我忘記從我的某些樣式中刪除「fontFamily」。我現在刪除它們,並會很快推出apk,並會讓你知道崩潰是否停止。 – clocksmith

回答

2

它可能可能是字體無襯線冷凝不可用在某些設備上的,這就是爲什麼該應用程序崩潰。如果你想支持更多的字體你可以把你的資產產生的文件夾,然後可以通過擴展的TextView

public class MyTextView extends TextView { 

public MyTextView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    init(); 
} 

public MyTextView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(); 
} 

public MyTextView(Context context) { 
    super(context); 
    init(); 
} 

private void init() { 
    Typeface tf = Typeface.createFromAsset(getContext().getAssets(), 
              "your_font.ttf"); 
    setTypeface(tf); 
} 

}

,並在你的XML創建CustomTextView。

<com.mypackage.test.MyTextView 
android:id="@+id/txt" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:gravity="center" 
android:layout_weight="1" 
android:text="custom text view. " 
android:textSize="30dip" 
android:textColor="#ff0000" 
> 
+0

roboto字體在所有android 4.1 +版本中默認都不可用?我的意思是,很明顯,我不是在styles.xml中使用「font:family」的唯一人員。 – Andros

+0

它可能不是,所以更安全的方法是,如果你願意提供一些特殊的字體/字體放在應用程序包中相同,並使用此類如上所述。 –

+0

但我不想Roboto字體的設備 Andros

4

直到我從我的主題中刪除android:fontFamily時,我遇到了同樣的故障。我注意到你的TextView中有android:fontFamily