是否可以在Android应用程序中设置自定义字体?
我尝试了这里发布的内容,但我不知道我的扩展应用程序类在哪里。。。
有什么帮助吗?
编辑:
我尝试了以下方法:
>
从我的AndroidManifest.xml
调用这个新类。
我选择了我的风格并添加了它。
MyApp。java:
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
FontsOverride.setDefaultFont(this, "DEFAULT", "raleway_regular.ttf");
// This FontsOverride comes from the example I posted above
}
}
AndroidManifest。xml:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:name=".MyApp"
android:theme="@style/AppTheme">
....
样式。xml:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:fontFamily">default</item>
</style>
但我的字体还是不是长宁。。。有什么想法吗?
然后调用MyApp类。但对我的字体没有影响。。。
EDIT2:在我为我的按钮设置了自定义样式后,我意识到我的按钮应用了自定义字体。以下是我的自定义按钮样式:
<style name="MyButtonStyle" parent="Widget.AppCompat.Button">
<item name="textAllCaps">false</item>
<item name="android:textAllCaps">false</item>
</style>
这是它现在的样子:
所以:我的按钮正在应用样式,但不是TextView
。知道为什么我的自定义字体没有应用于应用程序中的所有项目吗?
编写一个类
public class MyApp extends Application{
// Put the onCreate code as you obtained from the post link you reffered
}
现在下一件事是在AndroidManifest.xml应用程序标签给你的应用程序类命名。在这种情况下是MyApp
<application
android:name=".MyApp"
...
>
...
</application>
因此,每当打开应用程序时,都会调用MyApp类的onCreate方法,并设置字体。
更新“资产/字体/您的\u font\u文件”下的“放置字体文件”。ttf公司
将此行放在应用程序类(MyApp)的onCreate方法下
TypefaceUtil.overrideFont(getApplicationContext(), "SERIF", "fonts/your_font_file.ttf");
TypefaceUtil的源文件
public class TypefaceUtil {
/**
* Using reflection to override default typeface
* NOTICE: DO NOT FORGET TO SET TYPEFACE FOR APP THEME AS DEFAULT TYPEFACE WHICH WILL BE OVERRIDDEN
*
* @param context to work with assets
* @param defaultFontNameToOverride for example "monospace"
* @param customFontFileNameInAssets file name of the font from assets
*/
public static void overrideFont(Context context, String defaultFontNameToOverride, String customFontFileNameInAssets) {
final Typeface customFontTypeface = Typeface.createFromAsset(context.getAssets(), customFontFileNameInAssets);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Map<String, Typeface> newMap = new HashMap<String, Typeface>();
newMap.put("serif", customFontTypeface);
try {
final Field staticField = Typeface.class
.getDeclaredField("sSystemFontMap");
staticField.setAccessible(true);
staticField.set(null, newMap);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else {
try {
final Field defaultFontTypefaceField = Typeface.class.getDeclaredField(defaultFontNameToOverride);
defaultFontTypefaceField.setAccessible(true);
defaultFontTypefaceField.set(null, customFontTypeface);
} catch (Exception e) {
Log.e(TypefaceUtil.class.getSimpleName(), "Can not set custom font " + customFontFileNameInAssets + " instead of " + defaultFontNameToOverride);
}
}
}
}
现在更新你的style.xml文件
将包含在清单文件中的活动中的样式放在下面一行
<item name="android:typeface">serif</item>
希望这能有所帮助
编辑
uk.co.chrisjenx:书法
Lib不再为最新的android版本维护,现在https://github.com/InflationX/Calligraphy
dependencies {
implementation 'io.github.inflationx:calligraphy3:3.1.1'
implementation 'io.github.inflationx:viewpump:2.0.3'
}
将您的自定义字体添加到资产/
用法
对于默认字体
在应用程序类的#onCreate()方法中,使用CalligraphyConfig定义默认字体,并将其传递给添加到ViewPump builder的CalligraphyInterceptor。
@Override
public void onCreate() {
super.onCreate();
ViewPump.init(ViewPump.builder()
.addInterceptor(new CalligraphyInterceptor(
new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/Roboto-RobotoRegular.ttf")
.setFontAttrId(R.attr.fontPath)
.build()))
.build());
//....
}
注入上下文:包装活动上下文:
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase));
}
自定义样式
<style name="TextViewCustomFont">
<item name="fontPath">fonts/RobotoCondensed-Regular.ttf</item>
</style>
主题
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<item name="android:textViewStyle">@style/AppTheme.Widget.TextView</item>
</style>
<style name="AppTheme.Widget"/>
<style name="AppTheme.Widget.TextView" parent="android:Widget.Holo.Light.TextView">
<item name="fontPath">fonts/Roboto-ThinItalic.ttf</item>
</style>
解决方案下面的开发人员无法维护更多内容
android中有一个很棒的自定义字体库:书法
下面是一个如何使用它的示例。
在Gradle中,您需要将这一行放到应用程序的构建中。gradle文件:
dependencies {
compile 'uk.co.chrisjenx:calligraphy:2.2.0'
}
然后制作一个扩展Application的类并编写以下代码:
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("your font path")
.setFontAttrId(R.attr.fontPath)
.build()
);
}
}
您应该在资产/新目录上创建字体(见下文),因此在该代码中,您的字体路径应该是字体/SourceSansPro-Regular.ttf。(只是字体...不是/fonts...或资产...)
在activity类中,将此方法置于onCreate之前:
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
清单文件的最后一项内容如下所示:
<application
.
.
.
android:name=".App">
它会将整个活动更改为您的字体!简单干净!
在资产上,您应该右键单击新目录,称之为“字体”。在查找器中输入<代码>。ttf中的字体文件。
也不要忘记在属性中添加以下两行。xml,如果没有属性。xml文件,在值中创建新文件。xml
<attr format="string" name="fontPath"/>
<item name="calligraphy_tag_id" type="id"/>
我所做的就是:
2: 将我的“custom\u font.ttf”添加到刚刚创建的字体文件夹中。
3: 在样式中的应用程序基础主题中添加了我的自定义字体。XML
完成。
问题内容: 我需要为整个应用程序使用某些字体。我有同样的.ttf文件。是否可以在应用程序启动时将此字体设置为默认字体,然后在应用程序中的其他位置使用它?设置后,如何在布局XML中使用它? 问题答案: 是的,反思。这有效(基于此答案): (注意:由于缺乏对自定义字体的支持,因此这是一种解决方法,因此,如果你要更改此情况,请在此处加注星号以投票赞成android问题)。注意:请勿在该问题上留下“我也”
我想更改整个应用程序组件(文本视图、编辑文本、按钮等)的字体。我发现我可以为应用程序设置样式,但在这里我无法将字体从资产文件夹放入自定义样式xml。我必须将我的自定义TTF字体从资产文件夹放到样式xml中的typeface元素中。我无法将单空间字体更改为自定义字体。我的风格是
我正在应用程序中使用Roboto light字体。要设置字体,我必须向每个视图添加。有什么方法可以将Roboto字体声明为整个应用程序的默认字体家族吗?我试过这样,但似乎不起作用。
编辑: 我的理解可能是错误的,但这是一个不同于以编程方式设置语言环境的问题,因为我已经实现了那里建议的答案,我仍然有一些问题。 在这个问题中,我请求帮助解决这些问题(在设置的语言环境中没有参考的问题)。 原始帖子 我试图在我的应用程序中实现自定义语言环境,并遇到几个问题。 在调用setContentView之前,我在所有活动中使用以下代码: 编辑: 我还测试了它与: 我添加到Android中的所有
我最近在Android Studio中为我的Android项目添加了一个自定义字体(遵循这些说明)。这不是一个显示文本的常规字体,而是一个包含大量图标的自定义字体,在我的应用程序中使用。 这个很管用。然而,现在一些用户报告了这个问题,他们的设备上只有一些图标可以使用,而许多其他图标显示为字符。所有用户的共同点是,他们在设备设置中配置了一个自定义的FONT/主题,这似乎覆盖了应用程序的样式。因此,应
问题内容: 我知道,只需在屏幕上设置元素的自定义字体即可。 我想知道如何使用swift为整个应用程序设置它。(破解将是针对应用程序的每个元素执行我所知道的操作,但这只会成为可维护性的噩梦) 我看到这个问题已经用Objective-C标签问过,如何在不指定大小的情况下为整个iOS应用设置自定义字体,但我对Objective-C不够熟悉,不足以将代码移植到Swift 问题答案: 您可以设置UILabe