在TextView中设置Roboto字体 – xml

我已经find了关于这个主题的几个post,但是所有这些主题要么在TextView对象上设置setTypeFace()方法的字体,要么创build一个将字体设置为Robotoextends TextView的自定义类。 据我所知,从API-Level 11(?)什么的,我们可以将TypeFace设置为一个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" 

Solutions Collecting From Web of "在TextView中设置Roboto字体 – xml"

看看RobotoTextView项目。 适用于Android 1.5,您可以使用XML属性设置字体。 它还包括像RobotoButton,RobotoCheckbox等其他视图。

我没有看到一种方法可以将外部字体定义为xml属性。 您应该将字体存储在资产中并调用:

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

你不能直接从这样的资产设置字体,你必须做如下onCreate。 这将使你想做的事情一样。

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

希望它能帮助你

android:typeface属性只有一些有效的选项(根据Android文档)…

  • 正常
  • SANS
  • 衬线
  • 等宽

如果您需要在您的应用程序中使用Roboto字体作为旧设备,则需要将Roboto TTF文件包含到您的项目中。

使用这些字体的最明显的方法是使用TextView的setTypeface()方法,但是如果您想用XML指定它,则必须创build自定义的TextView并为您的自定义TextView创build自己的样式属性。

这个话题遍布互联网 。

对于JellyBean(4.1),您可以使用此StackOverflow主题中提供的方法。 在较旧的设备中,它将优雅地回退。 如果您必须回退到等宽字体或衬线,请在您使用所选字体的位置声明文件夹layout-v16,即“sans-serif-condensed”,并在默认文件夹中使用“等宽字体”或“衬线字体”。 如果你想回退到一个非默认的字体,你可以编程检查Android版本,并select适当的行动,即:

 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); } 

这对未来的人来说,就像我一样碰到同样的问题。 设置字体往往会占用大量的内存,当涉及到加载多行。 一起使用以下两个代码实际上使其工作顺利。 我从stackoverflow得到的解决scheme,但他们的答案没有列在一起。

 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; } }