Android Jetpack AppCompatTextView.setTypeface StackOverFlowError из-за бесконечного цикла - PullRequest
2 голосов
/ 28 марта 2019

Мы получили некоторые сбои по этому поводу: когда мы используем атрибут android:textStyle в AppCompatTextView с любым значением (полужирный, курсив или оба) или устанавливаем значение для android:fontFamily в версии Android 4.2.2 он зацикливается на себе, что в конечном итоге вызывает StackOverFlowError .

Вот пример того, как мы используем представления.

<androidx.appcompat.widget.AppCompatTextView
        android:id="@+id/welcome_app_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="3"
        android:gravity="center"
        android:text="@string/app_name"
        android:textColor="#fff"
        android:textSize="26sp"
        android:textStyle="bold" />

А вот одно из исключений:

Caused by java.lang.StackOverflowError
       at java.lang.Class.getDeclaredField(Class.java)
       at java.lang.Class.getDeclaredField(Class.java:629)
       at androidx.core.graphics.TypefaceCompatBaseImpl.getUniqueKey(TypefaceCompatBaseImpl.java:85)
       at androidx.core.graphics.TypefaceCompatBaseImpl.getFontFamily(TypefaceCompatBaseImpl.java:210)
       at androidx.core.graphics.TypefaceCompat.getBestFontFromFamily(TypefaceCompat.java:169)
       at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:196)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:702)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)

// it goes on like this forever until it reaches to Activity.setContentView()

Это может быть даже на некоторых конкретных устройствах, потому что мы не можем локально воспроизвести эту проблему. Помимо удаления стиля текста , что можно сделать для решения этой проблемы? Любая помощь приветствуется, спасибо.

...