| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> TextView设置Marqueue宽度足够时也发生滚动的原因 -> 正文阅读 |
|
[JavaScript知识库]TextView设置Marqueue宽度足够时也发生滚动的原因 |
需求在自定义ViewGroup时,其中包含一个TextView,设置Marqueue,当文本长度最大宽度时,开始滚动显示。 问题最开始使用固定宽度为最大宽度,然后文字居中,无问题。 后来由于需求变更,加入了drawable,所以宽度调整为自适应,文字居左。这时候问题出现了。 文字一直会滚动,哪怕文字很短,已经展示完全的时候 分析首先确认问题原因是居左、drawable及drawable padding、自适应宽度导致的,因为就修改了这几个地方。 依次回调居左、drawable及drawable padding的代码,问题还在,确认问题是自适应宽度导致的。 首先考虑是onMeasure测量导致的 onMeasure代码
首先以为是在测量时没计算padding及drawable padding导致的,所以加上了相关padding(其实这步可以排除,因为我View没有设置padding,而且去除drawble相关设置后还是存在这个问题,所以可以排除“测量时没计算padding及drawable padding导致”)。
问题还在,考虑是否测量代码本身存在问题。 更改onMeasure代码
问题还在,非逼我debug源码。 debug源码debug入口肯定是在TextView.startMarquee()
发现canMarquee是检查TextView宽度是否足够的判定。
debug发现一个奇怪的问题: width是591,mLayout.getLineWidth(0)是592,导致mLayout.getLineWidth(0) > width成立,判定为宽度不够。 在这里尝试获取了一下getWidth和getMeasureWidth发现getWidth要小1。 看来就是这里出问题了,实际宽度比测量宽度小了,为什么宽度会小了呢。 debug Textview的onMeasure发现以下这段代码:
发现测量出来的宽度是592 + getCompoundPaddingLeft() + getCompoundPaddingRight(); 说明测量出来是没问题的,为啥getMeasureWidth到getWidth减少了1呢? 发现问题百度一下,你就知道:Android开发之getMeasuredWidth和getWidth区别从源码分析 宽度是mRight - mLeft,而mRight、mLeft是在setFrame中赋值的,而在layout中调用了setFrame。 而view的layout是在ViewGroup的onLayout中调用的,看看我是咋写的:
一猜就猜到了是因为整数是奇数除以2时,导致宽度丢了1。 解决问题
编译,运行,问题解决! |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 9:28:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |