2013-03-31 3 views
16

Я нашел несколько постов по этой теме, но все это тем, либо задает шрифт с setTypeFace() методом на TextView объекта или создания пользовательского класса, который устанавливает шрифт Roboto и extendsTextView. Насколько я знаю из API-уровня 11 (?) Или чего-то еще, мы можем установить TypeFace как атрибут xml, каким-то образом. Например:Установка Roboto шрифта в TextView - XML ​​

<TextView 
     android:id="@+id/profileHeader" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:typeface="roboto" 
     android:text="Hello, world"> 
    </TextView> 

Каков правильный путь? Можно ли иметь запасной вариант, если приложение работает на устройстве ниже уровня API 11 что-то вроде (?):

android:typeface="roboto|monospace|serif" 
+0

Я не думаю, что есть какие-либо способы установки шрифтов в Android TextView из XML, отличных от стандартных. – Milan

ответ

6

Посмотрите на проект RobotoTextView. Работает до Android 1.5, и вы можете установить шрифт с помощью атрибутов XML. Он также включает в себя другие виды, такие как RobotoButton, RobotoCheckbox и т. Д.

1

Я не вижу, как вы можете определить внешний шрифт в качестве атрибута XML. Вы должны сохранить начертание шрифта в активах и называют:

tv.setTypeface(Typeface.createFromAsset(context.getAssets(), roboto.ttf)); 
1

Вы не можете установить шрифт непосредственно из активов, как это вы должны делать, как следовать в OnCreate. Это сделает то же самое, что вы хотите сделать.

TextView tvTextView = (TextView) findViewById(R.id.textView1); 
Typeface typeface = Typeface.createFromAsset(getAssets(),"Roboto.ttf"); 
tvTextView.setTypeface(typeface); 

Надеется, что это поможет вам out.:D

1

Атрибут android:typeface имеет только несколько допустимых параметров (в соответствии с Android документов) ...

  • нормального
  • SANS
  • serif
  • monospace

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

Наиболее очевидным способом использования этих шрифтов является использование метода TextView setTypeface(), но если вы хотите указать его в XML вместо этого, вы должны создать пользовательский TextView и создать свой собственный атрибут стиля для своего пользовательского TextView.

This topic is all over the Internet.

1

Для JellyBean (4.1) далее вы можете использовать метод, указанный в this StackOverflow topic. Он будет изящно отказываться от старых устройств. Если вы хотите отступить к моноширинной или засечной, объявите папку layout-v16, где вы используете шрифт, который вы выбрали, то есть «sans-serif-condensed», а в папке по умолчанию используется шрифт «monospace» или «serif» , Если вы хотите, чтобы возврат к не по умолчанию шрифта, вы можете проверить программно андроид версии и выбрать соответствующее действие, т.е .:

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) { 
    TextView textView = (TextView) findViewById(R.id.textView_id); 
    Typeface myFont = Typeface.createFromAsset(getAssets(),"RobotoCondensed.ttf"); 
    textView.setTypeface(myFont); 
} 
1

Это для будущих людей, работающих в той же проблеме, что и у меня. Настройка шрифта имеет тенденцию занимать много памяти, когда дело доходит до загрузки нескольких строк. Используя два следующих кода, чтобы заставить его работать плавно. Я получил решение от stackoverflow, но ответы не были указаны вместе.

public class RobotoTextView extends TextView { 

Context context; 

public RobotoTextView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    this.context = context; 
} 

public RobotoTextView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    this.context = context; 
} 

public RobotoTextView(Context context) { 
    super(context); 
    this.context = context; 
} 

public void setTypeface(Typeface tf, int style) { 
    if (!isInEditMode()) { 
     if (style == Typeface.NORMAL) { 
      super.setTypeface(TypeFaceProvider.getTypeFace(getContext(), "fonts/Roboto-Light.ttf")); 
     } else if (style == Typeface.ITALIC) { 
      super.setTypeface(TypeFaceProvider.getTypeFace(getContext(), "fonts/Roboto-LightItalic.ttf")); 
     } else if (style == Typeface.BOLD) { 
      super.setTypeface(TypeFaceProvider.getTypeFace(getContext(), "fonts/Roboto-Bold.ttf")); 
     } else if (style == Typeface.BOLD_ITALIC) { 
      super.setTypeface(TypeFaceProvider.getTypeFace(getContext(), "fonts/Roboto-BoldItalic.ttf")); 
     } 

    } 
} 



public class TypeFaceProvider { 

private static Hashtable<String, Typeface> sTypeFaces = new Hashtable<String, Typeface>(
     4); 

public static Typeface getTypeFace(Context context, String fileName) { 
    Typeface tempTypeface = sTypeFaces.get(fileName); 

    if (tempTypeface == null) { 
     tempTypeface = Typeface.createFromAsset(context.getAssets(), 
       fileName); 
     sTypeFaces.put(fileName, tempTypeface); 
    } 

    return tempTypeface; 
} 
} 
Смежные вопросы