Android 从服务器下载ttf字体文件以及使用

需求:用户阅读使用可以选择更多的字体,但不希望增加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()
    }                    

 

3.创建自定义字体文件方法使用

//fileName 字体文件的保存全地址 /data/data/........name.ttf 
//textview 文字视图 
Typeface fontFace = Typeface.createFromFile(fileName);
textview.setTypeface(fontFace);

 

网上这样下载字体使用资料很少,主要是APP对字体需求不大,或者放在font文件放下,可直接使用

阅读类的APP,为用户提供更多的字体浏览

做出来发现其实很简单,过程中踩过不少坑,记录保存下来

 

 

/data/data/${context.packageName}/files/${name}.ttf
上一篇:vue css下载字体并引入使用


下一篇:C++ SDL_ttf文字显示