在运行时设置字体,Textview

时间:2010-08-14 11:45:06

标签: android fonts textview

如何将字体设置为在运行时创建的textview?

我创建了textview

Textview tv = new TextView(this);      
tv.setTextSize(20);
像我可以改变尺寸
一样 我想将字体样式设置为“Verdana”。

怎么做? 问候 shishir

9 个答案:

答案 0 :(得分:65)

在运行时设置内置字体:

  • 首先,要更改字体,请使用 Typeface 类。

  • 现在, at Run-Time ,要设置font-face,请使用Java代码中的 setTypeface(Typeface)

    < / LI>
  • at Design-Time ,要设置font-face,请使用 android:typeface="serif"

例如:

<TextView android:text="@+id/TextView01"
 android:id="@+id/TextView01"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:textSize="30px"
 android:textStyle="italic"
 android:typeface="serif" />

在Android应用程序中设置自定义字体

要执行此操作,只需在项目根目录中创建资产/文件夹,并将字体(以TrueType或TTF格式)放入资产中。例如,您可以创建 assets/fonts/ 并将TTF文件放在那里:

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

答案 1 :(得分:4)

您的资产文件夹中可以包含.ttf字体。假设字体的名称是“default.ttf”,您现在必须写下2行代码

TextView text = new TextView(this);
text.setTypeface(Typeface.createFromAsset(getAssets(), "default.ttf"));

您还必须小心,因为不同的字体有不同的大小。您可能需要将大小设置为:

text.setTextSize(20);

答案 2 :(得分:3)

您可以使用存储在字体“ res / font”中的字体 例如适用于API级别16及更高版本。

   Typeface typeface = ResourcesCompat.getFont(context, R.font.rubik_medium);
   txtView.setTypeface(typeface);

您也可以使用

   Typeface typeface = getResources().getFont(R.font.rubik_medium);
   txtView.setTypeface(typeface);

但它支持API级别26及更高版本。

答案 3 :(得分:2)

这是一个小实用程序类

public class TypefaceHelper {

    public static void setViewGroupTypeface(ViewGroup container, Typeface typeface) {
        final int children = container.getChildCount();

        for (int i = 0; i < children; i++) 
            View child = container.getChildAt(i);

            if (child instanceof TextView) {
                setTextViewTypeface((TextView) child, typeface);
            } else if (child instanceof ViewGroup) {
                setViewGroupTypeface((ViewGroup) child, typeface);
            }
        }
    }

    public static void setTextViewTypeface(TextView textView, Typeface typeface) {
        textView.setTypeface(typeface);
    }

}

对于从适配器生成子节点的SpinnerListView s(即任何类型的AdapterView),您需要设置每个项目的字体{{1在适配器的View(或类似)方法中。这是因为可能会根据需要创建视图,因此在getView中设置Typeface将无法正常运行。

答案 4 :(得分:2)

在Android 8.0中引入Fonts in XML(从API版本14向后兼容),它非常容易从xml本身设置字体。

来自android文档:

  

Android 8.0(API级别26)引入了一项新功能,即XML字体,   它允许您使用字体作为资源。您可以添加字体文件   res / font /文件夹将字体捆绑为资源。这些字体是   在您的R文件中编译,并在Android中自动提供   工作室。您可以在新的帮助下访问字体资源   资源类型,字体。例如,要访问字体资源,请使用   @ font / myfont,或R.font.myfont。

首先在名为 font res文件夹中创建 Android资源目录 将.ttf字体文件添加到该目录,然后创建字体系列

创建字体系列

字体系列是一组字体文件及其样式和重量详细信息。在Android中,您可以创建一个新的字体系列作为XML资源,并将其作为单个单元访问,而不是将每个样式和权重作为单独的资源引用。通过这样做,系统可以根据您尝试使用的文本样式选择正确的字体。

要创建字体系列,请在Android Studio中执行以下步骤:

  1. 右键单击字体文件夹,然后转到新建&gt;字体资源文件。该 将出现“新建资源文件”窗口。
  2. 输入文件名,然后单击“确定”。新的字体资源XML 在编辑器中打开。
  3. <font>中的每个字体文件,样式和权重属性括起来 元件。以下XML说明了添加与字体相关的内容 字体资源XML中的属性:

    <?xml version="1.0" encoding="utf-8"?> <font-family xmlns:android="http://schemas.android.com/apk/res/android"> <font android:fontStyle="normal" android:fontWeight="400" android:font="@font/lobster_regular" /> <font android:fontStyle="italic" android:fontWeight="400" android:font="@font/lobster_italic" /> </font-family>

  4. 然后使用以下代码在textView中设置字体

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/lobster"/>
    

答案 5 :(得分:1)

您需要使用Typeface

  1. 将您希望使用的字体添加到项目中作为资产。
  2. 使用该字体创建字体对象:

    Typeface myFont = Typeface.createFromAsset(getAssets(), "fonts/MyFont.ttf");

  3. 将字体设置为您要自定义的对象:

    TextView myTextView = (TextView)findViewById(R.id.my_text_view); myTextView.setTypeface(myFont);

答案 6 :(得分:1)

如果您不想使用字体和字体文件的路径(如果输入错误的路径可能会使应用程序崩溃),这是另一种方法。

首先在您的styles.xml

中创建样式
<style name="YourFont">
    <item name="android:fontFamily">@font/your_font</item>
</style>

然后您可以使用添加样式

textView.setTextAppearance(context, R.style.YourFont);

答案 7 :(得分:0)

动态地你可以使用这个在xml中设置类似于android:fontFamily的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

答案 8 :(得分:-2)

您可以使用以下代码在运行时将所有文本设置为特定字体。只需在活动setViewGroupFont方法结束时或在动态创建新视图时调用onCreate方法:

private static final String FONT_NAME = "fonts/Roboto-Regular.ttf";
private static Typeface m_font = null;

public static Typeface getFont(Context p_context)
{
    if (null == m_font && null != p_context)
    {
        m_font = Typeface.createFromAsset(p_context.getApplicationContext().getAssets(), FONT_NAME);
    }
    return m_font;
}

public static void setViewGroupFont(ViewGroup p_viewGroup)
{
    if (null != p_viewGroup)
    {
        for (int currChildIndex = 0; currChildIndex < p_viewGroup.getChildCount(); currChildIndex++)
        {
            View currChildView = p_viewGroup.getChildAt(currChildIndex);

            if (ViewGroup.class.isInstance(currChildView))
            {
                setViewGroupFont((ViewGroup) currChildView);
            }
            else
            {
                try
                {
                    Method setTypefaceMethod = currChildView.getClass().getMethod("setTypeface", Typeface.class);

                    setTypefaceMethod.invoke(currChildView, getFont(p_viewGroup.getContext()));
                }
                catch (NoSuchMethodException ex)
                {
                    // Do nothing
                }
                catch (Exception ex)
                {
                    // Unexpected error setting font
                }
            }
        }
    }
}