我使用的是android自定义字体lib书法https://github.com/chrisjenx/Calligraphy。
但是对textview没有任何影响。我使用以下代码:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(new CalligraphyContextWrapper(newBase));
}
}
在XML中:
<TextView
tools:context=""
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Touch Listner"
android:textSize="18sp"
app:fontPath="fonts/gotham-book.ttf" />
在attrs:
<resources>
<attr name="fontPath" format="string"/>
</resources>
在assets / font / gotham-book.ttf
中答案 0 :(得分:4)
从TextView
删除命名空间。
<TextView
tools:context=""
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Touch Listner"
android:textSize="18sp"
fontPath="fonts/gotham-book.ttf" />
(将app:fontPath
更改为fontPath
)
令人讨厌的是我们无法解析auto-res命名空间。
答案 1 :(得分:3)
创建现在扩展Application的类,并在其中包含以下代码。并在应用程序标记下的清单中声明它。
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/Roboto-ThinItalic.ttf")
.setFontAttrId(R.attr.fontPath)
.build()
);
答案 2 :(得分:3)
创建扩展Application
的类。
这样的事情:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/DINNextLTPro-Regular.otf")
.setFontAttrId(R.attr.fontPath)
.build()
);
}
}
接下来我们需要做的是打开应用程序的AndroidManifest.xml
文件,并在应用程序标记的MyApplication
属性中添加对android:name
的引用,以便最后清单文件看起来与此类似:
<?xml version="1.0" encoding="utf-8"?>
<manifest package="it.sbsmobile.golife"
xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:name="com.example.MyApplication">
<activity
android:name=".Profile1"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
另外,https://github.com/chrisjenx/Calligraphy上的说明通过覆盖活动中的方法来注入上下文,如下所示:
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
来源:LINK
为什么要扩展Application类? ANSWER
答案 3 :(得分:1)
1)下载并复制项目资产文件夹中的字体(yourfont.ttf)文件
2)在您的Activity / Fragment中使用以下代码加载字体
Typeface yourfont = Typeface.createFromAsset(getAssets(),
"fonts/yourfont.ttf");
3)找到TextView(或您要设置此字体的任何其他视图)并使用View的setTypeface方法。 例如。
TextView textview1 = (TextView) findViewById(R.id.exampletextview);
textview1.setTypeface(yourfont);
这当然有一个缺点,即如果你想要应用字体的视图很多,你可以为每个视图手动设置字体。在这种情况下,您可以通过扩展Textview类来创建自定义视图。类似下面的代码:
public class MyTextView extends TextView {
public MyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyTextView(Context context) {
super(context);
init();
}
public void init() {
Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/yourfont.ttf");
setTypeface(tf ,1);
}
}
并在xml中将其用作<com.yourpackagename.MyTextView />
答案 4 :(得分:1)
我遇到了同样的问题。
在这里,你需要做两件事。
首先,在xml中,在布局根
中添加两行(如下所示)xmlns:tools="http://schemas.android.com/tools"
tools:ignore="MissingPrefix"
最后,在Activity类中,
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
Yooooo,已经完成!!简单
答案 5 :(得分:0)
我使用了TypefaceTextView lib来获得您想要的结果。请看一下(https://github.com/ragunathjawahar/android-typeface-textview)。
答案 6 :(得分:0)
You can also use simple EasyFonts third party library to set variety of custom font to your TextView
. By using this library you should not have to worry about downloading and adding fonts into the assets/fonts folder. Also about Typeface object creation.
Provided font faces. Which might you would like to use.
Simply:
TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setTypeface(EasyFonts.robotoThin(this));