2017-10-10 156 views
1

每當我顯示Toast時,應用程序崩潰。Toast在使用主題中的fontFamily屬性時拋出ArrayIndexOutOfBoundsException與appcompat v26

如果我使用舊版AppCompat庫或從樣式中刪除fontFamily,該應用可以正常工作。

的onCreate:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toast.makeText(this, "Test", Toast.LENGTH_SHORT).show(); //line 13 
} 

相關性:

compile 'com.android.support:appcompat-v7:26.1.0' 

AppTheme:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="android:fontFamily">sans-serif-light</item> 
</style> 

堆棧跟蹤:

導致:java.lang.ArrayIndexOutOfBoundsException:length = 16;索引= 233 at android.content.res.StringBlock.get(StringBlock.java:65) at android.content.res.XmlBlock $ Parser.getPooledString(XmlBlock.java:458) at android.content.res.TypedArray .loadStringValueAt(TypedArray.java:1212) at android.content.res.TypedArray.getString(TypedArray.java:202) at android.support.v7.widget.TintTypedArray.getString(TintTypedArray.java:143) at android .support.v7.widget.AppCompatTextHelper.updateTypefaceAndStyle(AppCompatTextHelper.java:215) at android.support.v7.widget.AppCompatTextHelper.loadFromAttributes(AppCompatTextHelper.java:152) at android.support.v7.widget.AppCompatTextHelp erV17.loadFromAttributes(AppCompatTextHelperV17.java:38) 在android.support.v7.widget.AppCompatTextView。(AppCompatTextView.java:81) 在android.support.v7.widget.AppCompatTextView。(AppCompatTextView.java:71) 在android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:103) at android.support.v7.app.AppCompatDelegateImplV9.createView(AppCompatDelegateImplV9.java:1024) at android.support.v7.app.AppCompatDelegateImplV9。 onCreateView(AppCompatDelegateImplV9.java:1081) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:769) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)在android.view.LayoutInflater.rInflate(LayoutInflater.java:518) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) android.view.LayoutInflater.inflate(LayoutInflater.java:426) at android.view.LayoutInflater.inflate(LayoutInflater.java:377) at android.widget.Toast.makeText(Toast.java:266) at io。 yarsa.blankapp.MainActivity.onCreate(MainActivity.java:13) at android.app.Activity.performCreate(Activity.java:6679) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1 119) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) at android.app.ActivityThread。在android.app.ActivityThread上使用handleLaunchActivity(ActivityThread.java:2726) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1477) at android.os.Handler.dispatchMessage (Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6126) at java.lang.reflect.Method.invoke (本機方法) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

是否有任何替代方案,以便我可以使用AppCompat庫的最新版本的主題中的fontFamily屬性?

回答

6

主題中添加的字體類似如下─

<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar"> 
     <item name="android:textViewStyle">@style/TextViewStyle</item> 
     <item name="android:buttonStyle">@style/ButtonStyle</item> 
    </style> 

    <style name="TextViewStyle" parent="android:Widget.TextView"> 
     <item name="android:fontFamily">sans-serif-light</item> 
    </style> 

    <style name="ButtonStyle" parent="Widget.AppCompat.Button"> 
     <item name="android:fontFamily">sans-serif-light</item> 
    </style> 
+0

它的工作。大! –

+0

感謝您的解決方案!一個問題:爲什麼它是'android:Widget.Holo.Button'而不是'android:Widget.Button'?如果我的基本主題是使用'Base.Theme.AppCompat.Light.DarkActionBar',它仍然是一樣的嗎? – Aba

+1

@Aba不,Holo風格不會創造出同樣的設計。我編輯了答案。 –

4

據Android開發者指南fonts in xml

添加字體樣式

打開styles.xml,並設置fontFamily屬性爲您要訪問的字體文件 。

<style name="customfontstyle" parent="@android:style/TextAppearance.Small"> 
    <item name="android:fontFamily">@font/lobster</item> 
</style> 

在你的情況,你應該把@font/前綴

<item name="android:fontFamily">@font/sans-serif-light</item> 
+0

感謝您的幫助。 –

相關問題