gpt4 book ai didi

android - Android 中正确使用自定义字体

转载 作者:太空宇宙 更新时间:2023-11-03 10:20:47 25 4
gpt4 key购买 nike

所以我扩展了 TextView 以使用自定义字体(如 here 所述),即,

public class CustomTextView extends TextView {
public static final int CUSTOM_TEXT_NORMAL = 1;
public static final int CUSTOM_TEXT_BOLD = 2;

public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
initCustomTextView(context, attrs);
}

private void initCustomTextView(Context context, AttributeSet attrs) {
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.CustomTextView, 0, 0);
int typeface = array.getInt(R.styleable.CustomTextView_typeface, CUSTOM_TEXT_NORMAL);
array.recycle();
setCustomTypeface(typeface);
}

public setCustomTypeface(int typeface) {
switch(typeface) {
case CUSTOM_TEXT_NORMAL:
Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "customTextNormal.ttf");
setTypeface(tf);
break;
case CUSTOM_TEXT_BOLD:
Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "customTextBold.ttf");
setTypeface(tf);
break;
}
}
}

然后我在添加到 Activity 主布局的 fragment 中使用 CustomTextView。一切正常,但似乎存在一些内存问题,即每次我旋转屏幕(导致 Activity 经历其生命周期)时,除了之前的加载之外,字体 Assets 还会加载到 native 堆中。例如;下面是在初始加载且没有屏幕旋转(使用 Roboto-Light 字体)后 adb shell dumpsys meminfo my.package.com 的屏幕转储:

enter image description here

在几次旋转后相同的屏幕转储

enter image description here

显而易见的是每次屏幕旋转时发生的 Assets 分配 native 堆的增加(GC 也没有清除它)。当然,我们不应该以上述方式使用自定义字体,如果不是,我们应该如何使用自定义字体?

最佳答案

您应该找到答案 here .

基本上,您需要构建自己的系统来在创建这些字体后对其进行缓存(因此您只需创建每个字体一次)。

关于android - Android 中正确使用自定义字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22642275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com