我应用了一个自定义字体TextView,但它似乎没有改变字体。
这是我的代码:
Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/myFont.ttf");
TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setTypeface(myTypeface);
谁能帮我摆脱这个问题?
我应用了一个自定义字体TextView,但它似乎没有改变字体。
这是我的代码:
Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/myFont.ttf");
TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setTypeface(myTypeface);
谁能帮我摆脱这个问题?
当前回答
七年后,你可以改变整个应用程序的textView或你想要的很容易通过使用android。支持库26++。
E.g:
创建字体包app/src/res/font,并将字体移动到其中。
在你的应用主题中添加一个fontFamily:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
. . . ...
<item name="android:fontFamily">@font/demo</item>
</style>
仅用于textView的示例:
<style name="fontTextView" parent="@android:style/Widget.TextView">
<item name="android:fontFamily">monospace</item>
</style>
在你的主题中加入:
<item name="android:textViewStyle">@style/fontTextView</item>
目前它工作在8.1到4.1 API果冻豆,这是一个广泛的范围。
其他回答
在Mobiletuts+上有一个关于Android文本格式的很好的教程。快速提示:自定义Android字体
编辑:现在我自己测试了一下。这是解决方案。你可以使用一个子文件夹称为字体,但它必须在资产文件夹,而不是在res文件夹。所以
资产/字体
还要确保字体结尾。我是说字体文件本身的结尾都是小写。换句话说,它不应该是myfont。ttf,而应该是myfont。ttf,这种方式必须小写
如果你想从网络加载字体或轻松地设置它的样式,你可以使用:
https://github.com/shellum/fontView
例子:
<!--Layout-->
<com.finalhack.fontview.FontView
android:id="@+id/someFontIcon"
android:layout_width="80dp"
android:layout_height="80dp" />
//Java:
fontView.setupFont("http://blah.com/myfont.ttf", true, character, FontView.ImageType.CIRCLE);
fontView.addForegroundColor(Color.RED);
fontView.addBackgroundColor(Color.WHITE);
不幸的是,这个问题没有好的解决方案。
我已经看到了许多关于使用自定义TextView的文章,但他们忘记了,这不仅是textviews,可以实现字体&有textviews隐藏在其他视图无法访问的开发人员;我还没开始讲Spannable呢。
你可以使用外部字体工具,比如:
书法字体工具
但是这在应用程序的创建上循环每个视图,甚至这个实用程序错过了一些视图(ViewPager呈现正常字体),然后你有问题,当谷歌更新他们的构建工具,这偶尔会崩溃,因为它需要针对已弃用的属性。由于使用Java的反射,它也有点慢。
这真的是由谷歌来解决的。Android需要更好的字体支持。如果你看看iOS的解决方案,他们实际上有100种字体可供选择。想要自定义字体?简单地丢一个TFF,它是可用的..
目前,我们目前仅限于谷歌提供的服务,这是非常有限的,但幸运的是,移动优化。
答:更新 Android 8.0 (API级别26)引入了一个新特性,XML字体。 只要在运行Android 4.1 (API级别16)或更高的设备上使用XML字体功能,使用支持库26。
请看这个链接
旧的答案
有两种方法来定制字体:
! !自定义字体 资产/字体/ iran_sans.ttf
方法一: 反射字体。class |||最好的方式
在类extends Application中调用FontsOverride.setDefaultFont(),这段代码将导致所有软件字体被更改,甚至是Toasts字体
AppController.java
public class AppController extends Application {
@Override
public void onCreate() {
super.onCreate();
//Initial Font
FontsOverride.setDefaultFont(getApplicationContext(), "MONOSPACE", "fonts/iran_sans.ttf");
}
}
FontsOverride.java
public class FontsOverride {
public static void setDefaultFont(Context context, String staticTypefaceFieldName, String fontAssetName) {
final Typeface regular = Typeface.createFromAsset(context.getAssets(), fontAssetName);
replaceFont(staticTypefaceFieldName, regular);
}
private static void replaceFont(String staticTypefaceFieldName, final Typeface newTypeface) {
try {
final Field staticField = Typeface.class.getDeclaredField(staticTypefaceFieldName);
staticField.setAccessible(true);
staticField.set(null, newTypeface);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
方法2:使用setTypeface
对于特殊的视图,只需调用setTypeface()来更改字体。
CTextView.java
public class CTextView extends TextView {
public CTextView(Context context) {
super(context);
init(context,null);
}
public CTextView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context,attrs);
}
public CTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context,attrs);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public CTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context,attrs);
}
public void init(Context context, @Nullable AttributeSet attrs) {
if (isInEditMode())
return;
// use setTypeface for change font this view
setTypeface(FontUtils.getTypeface("fonts/iran_sans.ttf"));
}
}
FontUtils.java
public class FontUtils {
private static Hashtable<String, Typeface> fontCache = new Hashtable<>();
public static Typeface getTypeface(String fontName) {
Typeface tf = fontCache.get(fontName);
if (tf == null) {
try {
tf = Typeface.createFromAsset(AppController.getInstance().getApplicationContext().getAssets(), fontName);
} catch (Exception e) {
e.printStackTrace();
return null;
}
fontCache.put(fontName, tf);
}
return tf;
}
}
是的,就像Dipali说的那样,下载字体非常简单。
你是这样做的……
Place a TextView. In the properties pane, select the fontFamily dropdown. If it isn't there, find the caret thingy (the > and click on it to expand textAppearance) under the. Expand the font-family drop down. In the little list, scroll all the way down till you see more fonts This will open up a dialog box where you can search from Google Fonts Search for the font you like with the search bar at the top Select your font. Select the style of the font you like (i.e. bold, normal, italic, etc) In the right pane, choose the radio button that says Add font to project Click okay. Now your TextView has the font you like!
奖金: 如果你想在你的应用程序中使用所选字体的文本样式,只需添加<item name="android:fontfamily">@font/fontnamehere</item>到你的styles.xml