需求:用户阅读使用可以选择更多的字体,但不希望增加apk的大小
分析:从后端服务器提供的地址下载使用
有谷歌提供的可下载字体,未成功实现
成功实现的:
1. 后端服务器存放ttf字体文件,提供下载地址
2. 下载到手机中
//name:下载后的文件名字。url:字体文件下载地址 private fun downLoadFont(name : String,url : String){ Thread { val client: OkHttpClient = OkHttpClient.Builder().build() var request = Request.Builder() .url(url).get() .build() val call = client.newCall(request) val response = call.execute() //获取下载的内容输入流 val body = response.body val inputStream = body!!.byteStream() val lengh = body.contentLength() Logger.i("fontsDownload","文件大小:${lengh}") //保存文件路径及名字 var file_name = "/data/data/${context.packageName}/files/${name}.ttf" // 文件保存到本地 val file = File(name) val outputStream = FileOutputStream(file_name) var lien = 0 var losing = 0 val bytes = ByteArray(1024) while (inputStream.read(bytes).also { lien = it } != -1) { outputStream.write(bytes, 0, lien) losing += lien val i = losing.todouble() / lengh mActivity.runOnUiThread { Logger.i("fragmentmine", "下载进度:${i*100}%") } } outputStream.flush() inputStream.close() outputStream.close() runOnUiThread { //可更新界面UI操作 Logger.i("fragmentmine", "下载完成***********") } }.start() }
//fileName 字体文件的保存全地址 /data/data/........name.ttf //textview 文字视图 Typeface fontFace = Typeface.createFromFile(fileName); textview.setTypeface(fontFace);
网上这样下载字体使用资料很少,主要是APP对字体需求不大,或者放在font文件放下,可直接使用
阅读类的APP,为用户提供更多的字体浏览
做出来发现其实很简单,过程中踩过不少坑,记录保存下来
/data/data/${context.packageName}/files/${name}.ttf