这个文案有点粗(字体有点粗,不要会错意嚎),不要这个粗,要比较纤细的那种粗!iOS没有这么粗啊

2023-12-06 00:40

本文主要是介绍这个文案有点粗(字体有点粗,不要会错意嚎),不要这个粗,要比较纤细的那种粗!iOS没有这么粗啊,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一段对话作为开场:

设计师: 这个文案有点粗(字体有点粗,不要会错意嚎),不要这个粗,要比较纤细的那种粗!

开发:

设计师: 就是看起来比较纤细的那种粗!

开发:

设计师: 比如…

开发: android:textStyle="bold"这就是粗体,就这一种可设置粗,不好看吗?

设计师: 为什么加粗会这么粗,iOS没有这么粗啊,不要这么粗,要纤细的那种粗!比较纤细的那种粗!…

开发: !@#¥%……&*()~~~~~~~内心很彷徨,内心有点小绝望,这个怎么给他说明白呢?


以上是开发和设计师的一段,开发给了一个粗,设计师要另外一个粗,此粗非彼粗啊。。。

听到问题后,我主动来调解下。

首先在英文环境下,android和ios表现的一样优秀,在中文情况下就差强人意了。

为什么会比iOS的粗,因为是系统字体不一样的原因,iOS 用的是Helvetica,4.0之前是 Droid Sans Fallback字体,Android 4.0 之后西文字体升级为 Roboto,其字体本身就设计加粗效果就是这么粗。就没有办法了吗?有的

  • 可以换字体,比如light字体。但是不支持局部的加粗,不满足某些条件,比较难办,况且加字体这事,android上请慎重……
  • 第二种,也是目前采用的方案,继承CharacterStyle,实现updateDrawState方法,设置tp.setFakeBoldText(true);是一种伪粗体效果,比原字体加粗的效果弱一点。当然这里还可以有第三种办法就是tp.setStyle(Paint.Style.FILL_AND_STROKE); tp.setStrokeWidth(2);设置1-5控制字体加粗的程度,可以控制是否实心什么的,自己尝试去做更多的效果吧

先来个效果图:

在这里插入图片描述

实现

1. 自定义textview类

public class SlightlyBoldTextView extends android.support.v7.widget.AppCompatTextView {public SlightlyBoldTextView(Context context) {super(context);setSlightBoldStyle();}public SlightlyBoldTextView(Context context, AttributeSet attrs) {super(context, attrs);
//        attrs.getAttributeIntValue();setSlightBoldStyle();}public SlightlyBoldTextView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);setSlightBoldStyle();}private void setSlightBoldStyle(){Log.i("bold","setSlightBoldStyle...");SpannableString str = new SpannableString(getText().toString());str.setSpan(new SlightlyBoldSpan(),0,getText().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);setText(str);}public class SlightlyBoldSpan extends CharacterStyle {@Overridepublic void updateDrawState(TextPaint tp) {/** 以下两种方法选其一 */// firsttp.setFakeBoldText(true);// secondtp.setStyle(Paint.Style.FILL_AND_STROKE);tp.setStrokeWidth(10);//控制字体加粗的程度}}
}
2. 在layout/xml中加入自定义textview(或者忽略此步直接第三步中findViewById改为创建一个TextView对象即可)

<你的包名.SlightlyBoldTextViewandroid:id="@+id/tvBoldSlightBold"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="10dp"android:textSize="20sp"android:text="字体效果-boldsmall"/>
3. 给TextView设置spannable达到bold效果

TextView tvBoldSmall = findViewById(R.id.tvBoldSmall);SpannableString str = new SpannableString(tvBoldSmall.getText().toString());
str.setSpan(new FakeBoldSpan(),0,tvBoldSmall.getText().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tvBoldSmall.setText(str);

ok,基本实现。欢迎拍砖。

TAG:Android TextView Spannable String CharacterStyle

这篇关于这个文案有点粗(字体有点粗,不要会错意嚎),不要这个粗,要比较纤细的那种粗!iOS没有这么粗啊的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/459767

相关文章

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

对postgresql日期和时间的比较

《对postgresql日期和时间的比较》文章介绍了在数据库中处理日期和时间类型时的一些注意事项,包括如何将字符串转换为日期或时间类型,以及在比较时自动转换的情况,作者建议在使用数据库时,根据具体情况... 目录PostgreSQL日期和时间比较DB里保存到时分秒,需要和年月日比较db里存储date或者ti

电脑没有仿宋GB2312字体怎么办? 仿宋GB2312字体下载安装及调出来的教程

《电脑没有仿宋GB2312字体怎么办?仿宋GB2312字体下载安装及调出来的教程》仿宋字体gb2312作为一种经典且常用的字体,广泛应用于各种场合,如何在计算机中调出仿宋字体gb2312?本文将为您... 仿宋_GB2312是公文标准字体之一,仿China编程宋是字体名称,GB2312是字php符编码标准名称(简

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

豆包 MarsCode 不允许你还没有女朋友

在这个喧嚣的世界里,爱意需要被温柔地唤醒。为心爱的她制作每日一句小工具,就像是一场永不落幕的浪漫仪式,每天都在她的心田播撒爱的种子,让她的每一天都充满甜蜜与期待。 背景 在这个瞬息万变的时代,我们都在寻找那些能让我们慢下来,感受生活美好的瞬间。为了让这份浪漫持久而深刻,我们决定为女朋友定制一个每日一句小工具。这个工具会在她意想不到的时刻,为她呈现一句充满爱意的话语,让她的每一天都充满惊喜和感动

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

关键字synchronized、volatile的比较

关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且volatile只能修饰于变量,而synchronized可以修饰方法,以及代码块。随着JDK新版本的发布,synchronized关键字的执行效率上得到很大提升,在开发中使用synchronized关键字的比率还是比较大的。多线程访问volatile不会发生阻塞,而synchronize

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验