电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Android 實現文字左右對齊

瀏覽:4日期:2022-09-19 08:02:32

這里會涉及到實現原理的解析,如果只是需要使用輪子,請拉到最底下;

1. TextView 效果

首先,讓我們先來看一下TextView的顯示效果:

Android 實現文字左右對齊

中文情況下還好,但是英文情況下的顯示效果就不是很好看了,右邊會留了很長的空白,對于追求用戶體驗的,這樣的顯示效果肯定是不能滿足的;但是TextView內部也沒有提供API給我們,那么就只能自己來實現了;

2. 對齊原理

原理:將一行剩余的寬度平分給當前單詞的間距,這樣來達到左右對齊的效果;那么我們就有兩種實現方案:

(1)TextView繪制一行的計算原理簡單粗暴,就是計算這一行顯示不下一個單詞的時候,就進行回車換行;TextView已經手動給我們計算出了一行能顯示多少的字符,那么我們只需要通過計算剩余的寬度再進行繪制即可;

會存在問題:如果一行存在單詞較少的情況,就會出現間隔過大的問題;

比如

Android 實現文字左右對齊

(2)通過手動計算一行能顯示多少個字符,然后再計算剩余的寬度進行繪制;這樣只是比第一步多了個自己計算一行能顯示多少個字符的操作;

但是這樣也會存在問題:如果單詞存在中英文混合,或者非中文的情況,會很大概率出現換行時單詞被截斷的問題;

比如

Android 實現文字左右對齊

3. 最終方案

以上兩種方案都會存在缺陷,那這樣的話我們就得對出現的問題提出解決方案;

當前市場上有成熟的閱讀軟件,最常用的就是左右對齊的排版效果,來看看當前的閱讀軟件是怎么解決這些問題的;

先看一下微信讀書app的顯示效果:

Android 實現文字左右對齊

再看一下掌閱app的顯示效果:

Android 實現文字左右對齊

微信讀書和掌閱都是對這個過長的單詞進行截斷處理,然后使用“-”符號將這兩個截斷的單詞連接起來,再進行繪制時就不會出現上述兩種方案的問題;

那么最終方案就是:

通過手動計算一行能顯示多少個單詞,如果一行最后一個單詞顯示不下,則進行截斷處理,中文則不不存在該問題,這里針對非中文的處理;然后再根據剩余空間進行繪制;

那么有了方案之后,接下來看看具體要怎么實現;

4. 最終實現

(1)先遍歷當前頁面的字符,將中英文截取為一個個單詞,具體實現在getWordList(String text)方法里面;通過遍歷當前的字符,判斷如果為中文時,則為一個單詞,非中文時則通過遍歷該英文單詞進行拼接,最后拼成一個非中文單詞;

(2)通過遍歷當前的單詞,計算每一行要顯示的單詞集合,具體實現在getLineList(List<String> frontList)這個方法里面;遍歷單詞時,當添加最后一個單詞時,寬度已經超過一行顯示的距離,那么就判斷最后一個單詞是否為中文,是的話則添加到下一行,否則的話則進行截斷處理;

(3)通過第二步計算出來的每一行的單詞,計算剩余的距離進行繪制;

Android 實現文字左右對齊

5. 優化點

(1)代碼里修改了繪制的邏輯后,那么關于TextView的一些基礎屬性也要進行適配;比如布局的方向,可以使用TextView自帶的屬性來進行設置;通過android:gravity=''和android:textAlignment=''屬性來定義布局的文字方向,是居左還是居右邊,這兩個屬性都可以進行設置,textAlignment屬性的優先級比較高,如果同時設置的話,那么則以textAlignment屬性為準;

<com.example.testdemo1.XQJustifyTextViewandroid:layout_width='match_parent'android:layout_height='wrap_content'android:layout_margin='10dp'android:textSize='16sp'android:gravity='start'android:textAlignment='textStart'/>

(2)對于實現的英文單詞截斷的效果,還有優化的地方,經過一些小伙伴的提醒,發現還可以通過音節的進行拆分,再去研究了一波微信讀書和掌閱的截斷效果,發現確實是使用了音節來進行截斷,這樣展示效果就更加完美了;

后面研究了一波資料后,發現可以通過元音來進行截斷,英語單詞的元音有5個,分別是a,e,i,o,u; 那么就可以通過元音加一個輔音的規則來進行截斷;比如an,en之類的;這里只實現了一種規則來進行截斷,其他的規則過于復雜,暫時沒有引入;

看一下優化后的效果:

Android 實現文字左右對齊

GitHub源碼地址:

https://github.com/Amterson/AlginProject

到這里就結束啦。

以上就是Android 實現文字左右對齊的詳細內容,更多關于Android 文字左右對齊的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 中国品牌排名投票_十大品牌榜单_中国著名品牌【中国品牌榜】 | 广东教师资格网-广东教师资格证考试网 | 亚克力制品定制,上海嘉定有机玻璃加工制作生产厂家—官网 | Akribis直线电机_直线模组_力矩电机_直线电机平台|雅科贝思Akribis-杭州摩森机电科技有限公司 | 棕刚玉-白刚玉厂家价格_巩义市东翔净水材料厂 | 水厂污泥地磅|污泥处理地磅厂家|地磅无人值守称重系统升级改造|地磅自动称重系统维修-河南成辉电子科技有限公司 | 苏州同创电子有限公司 - 四探针测试仪源头厂家| 集菌仪_智能集菌仪_全封闭集菌仪_无菌检查集菌仪厂家-那艾 | 打包钢带,铁皮打包带,烤蓝打包带-高密市金和金属制品厂 | 板框压滤机-隔膜压滤机配件生产厂家-陕西华星佳洋装备制造有限公司 | 超声波_清洗机_超声波清洗机专业生产厂家-深圳市好顺超声设备有限公司 | 数年网路-免费在线工具您的在线工具箱-shuyear.com | 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 亮化工程,亮化设计,城市亮化工程,亮化资质合作,长沙亮化照明,杰奥思【官网】 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 天津次氯酸钠酸钙溶液-天津氢氧化钠厂家-天津市辅仁化工有限公司 | 快速门厂家-快速卷帘门-工业快速门-硬质快速门-西朗门业 | 扫地车厂家-山西洗地机-太原电动扫地车「大同朔州吕梁晋中忻州长治晋城洗地机」山西锦力环保科技有限公司 | 金属软管_不锈钢金属软管_巩义市润达管道设备制造有限公司 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 报警器_家用防盗报警器_烟雾报警器_燃气报警器_防盗报警系统厂家-深圳市刻锐智能科技有限公司 | 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 全国国际学校排名_国际学校招生入学及学费-学校大全网 | 武汉高温老化房,恒温恒湿试验箱,冷热冲击试验箱-武汉安德信检测设备有限公司 | 黑龙江京科脑康医院-哈尔滨精神病医院哪家好_哈尔滨精神科医院排名_黑龙江精神心理病专科医院 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 菏泽商标注册_菏泽版权登记_商标申请代理_菏泽商标注册去哪里 | 沙盘模型公司_沙盘模型制作公司_建筑模型公司_工业机械模型制作厂家 | 急救箱-应急箱-急救包厂家-北京红立方医疗设备有限公司 | 橡胶接头|可曲挠橡胶接头|橡胶软接头安装使用教程-上海松夏官方网站 | 塑料薄膜_PP薄膜_聚乙烯薄膜-常州市鑫美新材料包装厂 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 高扬程排污泵_隔膜泵_磁力泵_节能自吸离心水泵厂家-【上海博洋】 | 连续密炼机_双转子连续密炼机_连续式密炼机-南京永睿机械制造有限公司 | 山东锐智科电检测仪器有限公司_超声波测厚仪,涂层测厚仪,里氏硬度计,电火花检漏仪,地下管线探测仪 | 洁净化验室净化工程_成都实验室装修设计施工_四川华锐净化公司 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 镀锌角钢_槽钢_扁钢_圆钢_方矩管厂家_镀锌花纹板-海邦钢铁(天津)有限公司 | 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 余姚生活网_余姚论坛_余姚市综合门户网站 |