所以我想在android中更改android:fontFamily,但我在android中没有看到任何预定义的字体。如何选择预定义的选项之一?我真的不需要定义我自己的TypeFace,但我所需要的是与现在显示的不同。

<TextView
    android:id="@+id/HeaderText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="52dp"
    android:gravity="center"
    android:text="CallerBlocker"
    android:textSize="40dp"
    android:fontFamily="Arial"
 />

看来我在上面做的事真的行不通!BTW android:fontFamily=“Arial”是一个愚蠢的尝试!


当前回答

我正在使用Chris Jenx设计的优秀库书法,该库允许您在android应用程序中使用自定义字体。试试看!

其他回答

在某些情况下,这里有一种更简单的方法。其原理是在xml布局中添加不可见的TextVview,并在java代码中获取其typeFace。

xml文件中的布局:

<TextView
    android:text="The classic bread is made of flour hot and salty. The classic bread is made of flour hot and salty. The classic bread is made of flour hot and salty."
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:fontFamily="sans-serif-thin"
    android:id="@+id/textViewDescription"/>

java代码:

myText.setTypeface(textViewSelectedDescription.getTypeface());

它对我很有用(例如在TextSwitcher中)。

我只想提一下,Android内部字体的地狱即将结束,因为今年在Google IO上,我们终于得到了这个->https://developer.android.com/preview/features/working-with-fonts.html

现在有了一个新的资源类型字体,您可以将所有应用程序字体放在res/fonts文件夹中,然后使用R.font.my_custom_font进行访问,就像您可以访问字符串res值、可绘制res值等一样。您甚至有机会创建字体face xml文件,该文件将由您的自定义字体设置(关于斜体、粗体和下划线属性)。

阅读上面的链接了解更多信息。让我们看看支持。

这里有一个很好的图书馆

    implementation 'uk.co.chrisjenx:calligraphy:2.3.0'

通过使用这个,可以动态地将fontfamily设置为类似于xml中的android:fontfamily,

For Custom font:

 TextView tv = ((TextView) v.findViewById(R.id.select_item_title));
 Typeface face=Typeface.createFromAsset(getAssets(),"fonts/mycustomfont.ttf"); 
 tv.setTypeface(face);

For Default font:

 tv.setTypeface(Typeface.create("sans-serif-medium",Typeface.NORMAL));

以下是使用的默认字体系列的列表,可以通过替换双引号字符串“sans-serif medium”来使用这些字体

FONT FAMILY                    TTF FILE                    

1  casual                      ComingSoon.ttf              
2  cursive                     DancingScript-Regular.ttf   
3  monospace                   DroidSansMono.ttf           
4  sans-serif                  Roboto-Regular.ttf          
5  sans-serif-black            Roboto-Black.ttf            
6  sans-serif-condensed        RobotoCondensed-Regular.ttf 
7  sans-serif-condensed-light  RobotoCondensed-Light.ttf   
8  sans-serif-light            Roboto-Light.ttf            
9  sans-serif-medium           Roboto-Medium.ttf           
10  sans-serif-smallcaps       CarroisGothicSC-Regular.ttf 
11  sans-serif-thin            Roboto-Thin.ttf             
12  serif                      NotoSerif-Regular.ttf       
13  serif-monospace            CutiveMono.ttf              

“mycustomfont.ttf”是ttf文件。路径将在src/assets/fonts/mycustomfont.ttf中,您可以参考此默认字体系列中有关默认字体的更多信息

Android不允许您从XML布局设置自定义字体。相反,您必须将特定字体文件绑定到应用程序的assets文件夹中,并以编程方式进行设置。类似于:

TextView textView = (TextView) findViewById(<your TextView ID>);
Typeface typeFace = Typeface.createFromAsset(getAssets(), "<file name>");
textView.setTypeface(typeFace);

注意,只有在调用setContentView()后才能运行此代码。此外,Android只支持某些字体,并且应为.ttf(TrueType)或.otf(OpenType)格式。即使如此,某些字体也可能不起作用。

这是一种在Android上绝对有效的字体,如果Android不支持您的字体文件,您可以使用它来确认您的代码是否有效。

Android O更新:根据Roger的评论,这现在可以在Android O中使用XML。