安卓代码中获取dimen设置字体大小setTextSize,会变得比dimen的值还大——解决方法_settextsize(r.dimen.ts_l5)-程序员宅基地

技术标签: gradle  as  android  字体  Android  

背景

 

 

holder.tvMsgContent.setTextSize(mContext.getResources().getDimensionPixelOffset(R.dimen.message_content_font));

<dimen name="message_content_font">32px</dimen>

实际效果: 上面第一句java代码,设置的是红框中的字体大小,按理说应该和上面的标题差不多大小吧,为什么差这么多呢?

 

解决

动态设置TextView字体大小时候,会出现偏差。

TextView中暴露出来设置字体大小的方法有两种。
setTextSize(float size)
setTextSize(int unit, float size)

 

上面用的是第一种,现在看看第二种方法的源码

 /**
     * Set the default text size to a given unit and value.  See {@link
     * TypedValue} for the possible dimension units.
     *
     * @param unit The desired dimension unit.
     * @param size The desired size in the given units.
     *
     * @attr ref android.R.styleable#TextView_textSize
     */
    public void setTextSize(int unit, float size) {
        Context c = getContext();
        Resources r;

        if (c == null)
            r = Resources.getSystem();
        else
            r = c.getResources();

        setRawTextSize(TypedValue.applyDimension(
                unit, size, r.getDisplayMetrics()));
    }


看到unit这个参数,是用来标记字体大小单位,TypedValue里面设置了好多种,我们常用的就两COMPLEX_UNIT_SP和COMPLEX_UNIT_PX,正好对应平时我们使用的px和sp。
它在内部默认传进来的size是sp单位的,也就是说不管你在外面做了什么处理,调用setTextSize(float size)这个方法时候,size的单位是sp。

这也就是你字体变大的原因。

正确使用时
setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, mContext.getResources().getDimensionPixelOffset(R.dimen.message_content_font))

 

现在的效果

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_14902389/article/details/53418082

智能推荐

【Proteus仿真】【STM32单片机】红外无线遥控器系统_protues红外线接收器-程序员宅基地

文章浏览阅读473次,点赞6次,收藏11次。本项目使用Proteus8仿真STM32单片机控制器,使用2个单片机,一个作为发射,一个作为接收,按键、LED等。主要功能:系统运行后,可通过发射机操作K1-K5键控制接收机LED1-LED5指示灯亮灭。_protues红外线接收器

3D目标检测-OpenPCDet使用realsense采集的.ply文件进行训练_realsense ply-程序员宅基地

文章浏览阅读518次,点赞10次,收藏7次。OpenPCDet的3D目标检测的初步实践环节_realsense ply

net framework 3.5怎么安装 / 无法安装怎么办_net framework 3.5无法安装-程序员宅基地

文章浏览阅读6.1w次,点赞14次,收藏80次。netframework3.5怎么安装以及netframework3.5无法安装的解决方法_net framework 3.5无法安装

可视化数据库管理工具:SQLPro Studio for Mac_mac 免费 sql 可视化-程序员宅基地

文章浏览阅读567次,点赞6次,收藏9次。它支持多种数据库类型,包括MySQL、PostgreSQL、SQLite等,方便用户进行数据库的管理和操作。SQLPro Studio for Mac提供了直观的界面和丰富的功能,使用户可以轻松地连接和管理数据库。用户可以通过该软件执行SQL查询、浏览和编辑数据、创建和管理数据库对象等操作。此外,SQLPro Studio for Mac还提供了数据导入和导出功能,方便用户在不同数据库之间迁移数据或与其他应用程序交换数据。_mac 免费 sql 可视化

自适应滤波-最小均方误差滤波_方差 误差滤波-程序员宅基地

文章浏览阅读2.2k次,点赞3次,收藏14次。最小均方误差滤波原理低通滤波不能像中值滤波那样很好的滤除冲激噪声。因为低通滤波的最终结果混合了图像信号无关的噪声和信号本身。相反,中值滤波能够在保护图像边缘不受损失的情况下,滤除与图像信号无关的噪声。但是当噪声不完全和图像信号无关,比如被混合了图像本身信号和一定噪声的加性噪声或乘性噪声污染的图像,我们该如何消除此种噪声呢?或许需要构造一种更加智能的滤波。自适应滤波的提出就是为了解决上述问题。自适应滤波利用图像局部特性和结构自适应选择合适的方法滤除噪声。根据图像局部邻域统计信息自适应滤波的时候,如果我_方差 误差滤波

使用xlsx、xlsx-style导出表格添加背景色;合并单元格部分样式缺失问题解决_xlsx.utils 添加背景色-程序员宅基地

文章浏览阅读754次,点赞10次,收藏4次。我这个是直接通过传入dom生产的sheet页,也可以通过数据生成sheet页,xlsx都有对应的方法,其实不影响我们修改样式。主要关注addRangeBorder(给合并行列赋值样式)、setExcelStyle(设置导出Excel样式)这两个方法。由于上次写的修改样式只关注了单元格的宽度,并没有设置颜色以及没关注到合并的单元格部分样式没设置上等问题,所以这篇来说下。我们通过xlsx可以通过dom元素、或者数据来生产sheet页,然后我们修改样式就操作对应的sheet页就可以了。_xlsx.utils 添加背景色

随便推点

Port Windows IPC apps to Linux, Part 2: Semaphores and events_semop namedevent-程序员宅基地

文章浏览阅读1.2k次。A mapping guide for complex, multithreaded, multiprocess applicationsSrinivasan Muthuswamy ([email protected]), Software Engineer, IBM Global Services GroupSrinivasan S. Muthuswamy works as a Software Engineer for IBM Global Services Group. He jo_semop namedevent

AD证书-CA故障:由于吊销服务器已脱机,吊销功能无法检查吊销-程序员宅基地

文章浏览阅读7.1k次。在证书服务器搭建好了之后,通过网页申请证书时,会报“由于吊销服务器已脱机,吊销功能无法检查吊销”的情况,导致不能正常下载证书解决方法:在活动目录服务器上,打开运行,输入cmdcertutil.exe -setreg CA\LogLevel 2提示旧值LogLevel REG_DWORD = 3新值LogLevel REG_DWO..._数字证书 吊销服务器已脱机

pandas用法详解_df.head()-程序员宅基地

文章浏览阅读6.3k次,点赞11次,收藏88次。一、生成数据表1、首先导入pandas库,一般都会用到numpy库,所以我们先导入备用:import numpy as npimport pandas as pd2、导入CSV或者xlsx文件:df = pd.DataFrame(pd.read_csv(‘name.csv’,header=1))df = pd.DataFrame(pd.read_excel(‘name.xlsx’))3、用pandas创建数据表:df = pd.DataFrame({“id”:[1001,1002,1003,_df.head()

RecyclerView GridLayoutManager 布局管理器 item 居中问题【完美】_android gridlayoutmanager 内居中-程序员宅基地

文章浏览阅读1.9k次。???? Hello,村长布局效果对比前后解决不居中的原因,我的 item 布局根容器使用的是 ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="wrap_content" android:layout_height="wrap_content"布局根容器使用 LinearLayout即可,必须同时指定 android:_android gridlayoutmanager 内居中

ZOJ--1010:Area(线段判交问题)_jerry, a middle school student, addicts himself to-程序员宅基地

文章浏览阅读1.1k次。AreaTime Limit: 2 Seconds Memory Limit: 65536 KB Special Judge Jerry, a middle school student, addicts himself to mathematical research. Maybe the problems he has thought are rea_jerry, a middle school student, addicts himself to mathematical research. ma

Android 笔记:Duplicate finish request for ActivityRecord-程序员宅基地

文章浏览阅读3.3k次。之前写代码的时候没注意,在Activity的finish方法里调用了别的方法,后来又在那个方法里调用了finish,然后奇怪的现象出现了,app打不开,卡死,后来才发现,log里无限出现了Duplicate finish request for ActivityRecord,而且不是error形式出现,时间多一点就会出现ANR,所以这么写是会卡死的 @Override publi..._duplicate finish request for

推荐文章

热门文章

相关标签