如何将字体设置为在运行时创建的textview?
我创建了textview
Textview tv = new TextView(this);
tv.setTextSize(20);
像我可以改变尺寸怎么做? 问候 shishir
答案 0 :(得分:65)
首先,要更改字体,请使用 Typeface 类。
现在, at Run-Time
,要设置font-face,请使用Java代码中的 setTypeface(Typeface)
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" />
要执行此操作,只需在项目根目录中创建资产/文件夹,并将字体(以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);
}
}
对于从适配器生成子节点的Spinner
或ListView
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中执行以下步骤:
将<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>
然后使用以下代码在textView
中设置字体
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/lobster"/>
答案 5 :(得分:1)
您需要使用Typeface:
使用该字体创建字体对象:
Typeface myFont = Typeface.createFromAsset(getAssets(), "fonts/MyFont.ttf");
将字体设置为您要自定义的对象:
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
}
}
}
}
}