android系统内置字体
android 系统本身内置了一些字体,可以在程序中使用,并且支持在xml配置textView的时候进行修改字体的样式。支持字段为android:textStyle ,android:typeface, android:fontFamily,系统内置了normal|bold|italic三种style, 内置了normal,sans,serif,monospace,几种字体(实测这几种字体仅英文有效),typace和fontFamily功能一样。
使用自定义的字体
以上的方式可以改变字体的样式,还不是真正的自定义。android系统支持TypeFace,即ttf的字体文件。我们可以在程序中放入ttf字体文件,在程序中使用Typeface设置字体。
第一步,在assets目录下新建fonts目录,把ttf字体文件放到这。
第二步,程序中调用:
public class MainActivity extends AppCompatActivity { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView= (TextView) findViewById(R.id.text); AssetManager assets = getAssets(); Typeface fromAsset = Typeface.createFromAsset(assets, "fonts/fzlt.ttf"); textView.setTypeface(fromAsset); } }
注意ttf文件命名不能使用中文,否则可能无法加载。
对于需要使用比较多的地方,可以写一个TextView的子类来统一处理。
public class CustomTextView extends TextView { public CustomTextView(Context context) { super(context); // TODO Auto-generated constructor stub } public CustomTextView(Context context, AttributeSet attrs) { super(context,attrs); // TODO Auto-generated constructor stub } public CustomTextView(Context context, AttributeSet attrs,int defStyle) { super(context,attrs,defStyle); // TODO Auto-generated constructor stub } public void setTypeface(Typeface tf, int style) { super.setTypeface(AppContext.getInstance().getTypeface()); } }
//初始化自定义字体
typeface = Typeface.createFromAsset(getAssets(), "fonts/fzlt.ttf");
法还是有点缺点的:只能替换一类控件的字体,如果需要替换Button或EditText控件的字体,需要以相同的方式自定义这些控件,这样工作量大,如何高效替换整个app中的字体,见下方参考资料。
在webview中使用自定义的字体
对于本地的网页,在asset目录放字体文件,并在css中添加以下内容,自定义一个字体face,并且在需要的地方使用这个字体face即可。
<style> @font-face { font-family: 'myface'; src: url('file:///android_asset/fonts/fzlt.ttf'); } body { margin: 0; padding: 0; font-family:'myface','方正兰亭纤黑简体'; } .textbar{ box-sizing:border-box; width:100%; padding:5px;} .textbar p{ font-size:16px; text-align:justify; color:#333;line-height:24px; margin:0 0 0 0;} .textbar h1{ font-size:18px; margin:10px 0 10px 0;color:#000} </style>
对于在线的网页,则需要把字体文件放到服务器,使用同样的方式定义字体face,应用到每个地方。
为了减少网页或者说服务器端的工作,可以使用本地注入的方式注入font-face的css,并对整个网页进行样式替换。给webview自定义webViewClient,重写onPageFinish,在其中添加如下内容:
view.loadUrl("javascript:!function(){" + "s=document.createElement('style');s.innerHTML=" + "\"@font-face{font-family:myhyqh;src:url('**injection**/hyqh.ttf');}*{font-family:myhyqh !important;}\";" + "document.getElementsByTagName('head')[0].appendChild(s);" + "document.getElementsByTagName('body')[0].style.fontFamily = \"myhyqh\";}()"); //由于网页上是没有权限访问本地的asset文件夹的,因此我们需要拦截请求来加载本地的文件,我这里替换了`file: //android_assets/`为 `**injection**/`了,我们还需要重写`shouldInterceptRequest` //在请求为我们这个字体文件的时候,加载本地文件: @Override public WebResourceResponse shouldInterceptRequest (WebView view, String url){ WebResourceResponse response = super.shouldInterceptRequest(view, url); Log.i("load intercept request:" + url); if (url != null && url.contains("**injection**/")) { //String assertPath = url.replace("**injection**/", ""); String assertPath = url.substring(url.indexOf("**injection**/") + "**injection**/".length(), url.length()); try { response = new WebResourceResponse("application/x-font-ttf", "UTF8", getAssets().open(assertPath)); } catch (IOException e) { e.printStackTrace(); } } return response; }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本文向大家介绍Android使用自定义字体的方法,包括了Android使用自定义字体的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android使用自定义字体的方法。分享给大家供大家参考,具体如下: 一、问题: 作为android初学者,在做一个游戏,游戏的标题我用的是TextView,android只提供斜体粗体,但把字体设置成楷体游戏的界面会更好,怎么才能实现。 二、解决方法:
问题内容: 我看到一些新网站在其网站上使用自定义字体(常规Arial,Tahoma等除外)。 并且它们支持大量的浏览器。 怎么做到的?同时,如果可能的话,还会阻止人们自由下载字体。 问题答案: 通常,您可以在CSS中使用自定义字体。这是一个非常基本的示例: 然后,简单地在特定元素上使用字体: (是您的选择器)。 请注意,某些字体格式并非在所有浏览器上都有效;您可以使用fontsquirrel.co
问题内容: 我正在尝试在JFrame中使用特殊字体,但遇到了问题。我有一个这样定义的JLabel: 并且我有一个名为CUSTOMFONT-MEDIUM.TTF(TrueType字体)的文件,但是编写了以下内容: 代码会编译,并且一切正常,除了不会显示“ lab”,因此没有文本。我想这是因为我从未指定字体大小,但是我所做的任何尝试都失败了。有人可以帮我吗? 问题答案: 您创建的字体必须先在中注册,以
我读到了Crudrepository,这是一个接口,用于在特定类型的存储库上进行通用CRUD操作。 但是我们可以创建我们的自定义接口并扩展CrudRepository。
问题内容: 我正在尝试在使用wkhtmltopdf生成的PDF中使用自定义字体。我读到您不能使用google webfonts,而wkhtmltopdf使用truetype .ttf文件。谁能确认?因此,我从Google webfont下载了一个.ttf文件,并将其放入服务器中,然后使用了字体: 和字体系列: 现在应该以Jolly Lodger字体呈现的文本根本没有出现,页面为空白。 我究竟做错了
本文向大家介绍C# Winform使用扩展方法实现自定义富文本框(RichTextBox)字体颜色,包括了C# Winform使用扩展方法实现自定义富文本框(RichTextBox)字体颜色的使用技巧和注意事项,需要的朋友参考一下 在利用C#开发Winform应用程序的时候,我们有可能使用RichTextBox来实现实时显示应用程序日志的功能,日志又分为:一般消息,警告提示和错误等类别。为了更好地