android 怎么获取app 字体颜色,android app 修改字体
android中可能會遇到修改字體的情況,雖然說需求比較少,但是偶爾還會遇到
可以使用三方框架來幫助我們簡單做到
api "uk.co.chrisjenx:calligraphy:2.2.0"
在style文件中添加一個字體的style
fonts/Roboto-Thin.ttf
我app中的main/assert/fonts/Roboto-hin.ttf??? 放置字體文件
AS集成這個框架,在activity的? attachBaseContext(Context newBase)方法中添加我們修改后的字體的context
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
為什么要在attachBaseContext中添加呢?? 我們都知道activity中是有context的,但是context是怎么來的呢?
activity的構(gòu)造方法是無參構(gòu)造,所以不是通過構(gòu)造方法傳遞的嗎?
activity的集成流程? context(抽象類) -> ContextWrapper(實現(xiàn)了context的所有方法,service的父類) -> ContextThemeWrapper(帶主體的context) -> activity
再看下activity的啟動流程? :??? activity啟動是先執(zhí)行了? attach方法?? 下面才回去執(zhí)行onCreate?? 如果我們想把一些初始化放到最高的優(yōu)先級,可以放在 attachBaseContext中。
private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {
Activity activity = null;
try {
java.lang.ClassLoader cl = r.packageInfo.getClassLoader();
activity = mInstrumentation.newActivity(
cl, component.getClassName(), r.intent);
} catch (Exception e) {
}
try {
if (activity != null) {
ContextImpl appContext = new ContextImpl();
appContext.init(r.packageInfo, r.token, this);
appContext.setOuterContext(activity);
CharSequence title = r.activityInfo.loadLabel(appContext.getPackageManager());
Configuration config = new Configuration(mCompatConfiguration);
activity.attach(appContext, this, getInstrumentation(), r.token,
r.ident, app, r.intent, r.activityInfo, title, r.parent,
r.embeddedID, r.lastNonConfigurationInstances, config);
attachBaseContext到底干了什么呢?? 代碼其實很簡單,就是把context賦值給activity,所以我們在把newbase添加了字體,所以activity的context,都會有我們的字體效果。
需要注意一點,就是每一個界面都有一個context,所以建議寫一個baseActivity,直接繼承。
protected void attachBaseContext(Context base) {
if (mBase != null) {
throw new IllegalStateException("Base context already set");
}
mBase = base;
}
總結(jié)
以上是生活随笔為你收集整理的android 怎么获取app 字体颜色,android app 修改字体的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hypertrm.exe进程是什么文件
- 下一篇: asp.net mvc 地址栏传输信息报