2016-02-26 1 views
0

У меня есть класс, который расширяет TextView и имеет некоторый код для поддержки текстовых стилей, однако я получаю сообщение об ошибке, когда Android Studio пытается отобразить его на панели предварительного просмотра.TextView extension throws NumberFormatException при попытке визуализации полужирного шрифта в Android Studio Предварительный просмотр

я в том числе трассировку стека и код класса ниже

java.lang.NumberFormatException: Для ввода строки: «жирный» на java.lang.NumberFormatException.forInputString (NumberFormatException.java:65) в java.lang.Long.parseLong (Long.java:441) в com.android.internal.util.XmlUtils_Delegate.convertValueToInt (XmlUtils_Delegate.java:72) в com.android.internal.util.XmlUtils.convertValueToInt (XmlUtils.java : 93) at android.util.BridgeXmlPullAttributes.getAttributeIntValue (BridgeXmlPullAttributes.java:134) в com.android.layoutlib.bridge.android.BridgeXmlBlockParser.getAttributeIntValue (BridgeXmlBlockParser.java:436) в com.myproject.util.BlockTextView.applyCustomFont (BlockTex tView.java:35) при com.myproject.meuprimeiroapp.util.BlockTextView. (BlockTextView.java:24) при java.lang.reflect.Constructor.newInstance (Constructor.java:526) при

private void applyCustomFont(Context context, AttributeSet attrs) { 

    int textStyle = attrs.getAttributeIntValue(ANDROID_SCHEMA, "textStyle", Typeface.NORMAL); 

    Typeface customFont = selectTypeface(context, textStyle); 
    setTypeface(customFont); 
} 

Код на основе этой статьи: Custom Fonts on Android — Using Font Styles

+0

могу ли я увидеть код? – pRaNaY

+0

уверен, но что еще вы хотите увидеть? код такой же как тот, который вы можете найти на поставленном линии связи (в самом низу) – Jay

ответ

2

После попытки решения Артема я продолжал получать странные ошибки инфляции, даже после добавления некоторый код try/catch.

Оказывается, значения строки, возвращаемые getAttributeValue приходят как «0x0„0x1“и такие, а не как„нормальный“,„жирный“. Так что я делю ниже рабочего раствора на основе кончике Артема.

private void applyCustomFont(Context context, AttributeSet attrs) { 

    String style = "0x0"; 
    try { 
     style = attrs.getAttributeValue(ANDROID_SCHEMA, "textStyle"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    int textStyle; 
    if (style != null && style.equals("0x1")) { 
     textStyle = Typeface.BOLD; 
    }else{ 
     textStyle = Typeface.NORMAL; 
    } 

    Typeface customFont = selectTypeface(context, textStyle); 
    setTypeface(customFont); 
} 
1

По какой-либо причине (возможно, для предварительного предварительного просмотра) строковое представление констант не переносится в числовые значения. Для textStyle здесь находится a link к документации.

Если вы хотите, чтобы ваш компонент обрабатывать как предварительный просмотр и время выполнения вы можете получить стиль с getAttributeValue функции и превратить его в постоянный вручную:

String style = attrs.getAttributeValue(ANDROID_SCHEMA, "textStyle"); 
int textStyle; 
if (style.equals("bold")) { 
    textStyle = Typeface.BOLD; 
} ... 
+0

Спасибо Артем! premisse в вашем ответе правильно, только то, что строковое значение будет «0x0» и «0x1», а не «нормальным» и «жирным». Использование этого кода вызвало у меня некоторую неприятную ошибку инфляции, которая потребовала от меня времени, чтобы разобраться. – Jay

+0

Android скрывает много чудес :) Большое расследование, Джей. Браво! –

Смежные вопросы