Android開發(fā)解決字符對齊問題方法
前言
其實(shí)很多人都會(huì)碰到文本不對齊,文字不對齊的情況,但是只要不明顯被提出,一般都會(huì)置之不理。我關(guān)注這個(gè)問題是因?yàn)橛袀€(gè)老哥問我倒計(jì)時(shí)的時(shí)候,10以上和10以下會(huì)出現(xiàn)寬度變化,因?yàn)?位數(shù)變1位數(shù)確實(shí)會(huì)變化很大,有的人會(huì)說1位數(shù)的時(shí)候前面補(bǔ)零,這也是一個(gè)方法,還有人說,你設(shè)置控件的寬度固定不就行了嗎?其實(shí)還真不好,即便你寬度固定,你的文字內(nèi)容也是會(huì)變的。
所以我就去想這個(gè)問題,雖然不是一個(gè)什么大問題,但當(dāng)你去探究,確實(shí)能收獲一些不一樣的東西。
基礎(chǔ)概念
首先回顧一些基礎(chǔ)的東西。
1字節(jié)是8位,所以1字節(jié)能有256種組合,說到這個(gè),就能聯(lián)系出ASCII碼,ASCII碼都熟吧,就是數(shù)字和字母啊這些。然后ASCII碼的定義的符號,是沒有到256的,這個(gè)也很容易理解,去看看ASCII碼的表就知道了。所以,ASCII碼中的符號,都能用1個(gè)字節(jié)表示。
但是你的漢字是沒辦法用256表示的,我們中華文化博大精深,不是區(qū)區(qū)256能容納得下的。所以漢字得用2個(gè)字節(jié)表示,甚至3個(gè)字節(jié)表示。然后emoji好像是要占3個(gè)字節(jié)還是4個(gè)字節(jié)得,這個(gè)我記得不太清了。而且不同的編碼占的也不同。
回顧一下這些內(nèi)容主要是為了找找感覺。
半角和全角
這個(gè)相信大家也有點(diǎn)了解,我們平時(shí)用輸入法的時(shí)候就能進(jìn)行半角全角的切換。
簡單來說,全角em是指一個(gè)字符占用兩個(gè)標(biāo)準(zhǔn)字符位置,半角en是指一個(gè)字符占用一個(gè)標(biāo)準(zhǔn)字符的位置。注意這里說的是占多少的位置,和上面提的字節(jié)沒關(guān)系,不是說你2個(gè)字節(jié)就占2個(gè)位置,1個(gè)字節(jié)只占一個(gè)位置。
但是一般半角和圓角都是針對ASCII碼里面的符號的(這個(gè)我沒找到相應(yīng)的概念,我是根據(jù)現(xiàn)象推導(dǎo)的)
所以先來看看直接設(shè)置半角和全角的效果
上面是半角,下面是全角,能明顯看出來,中文的半角和全角都是占了兩個(gè)標(biāo)準(zhǔn)字符的位置,而ASCII碼中的符號,在半角的情況下是占一個(gè),在全角的情況下是占兩個(gè)。
漢字是這樣,但是我在找資料的時(shí)候看到一個(gè)挺有意思的場景。就是日文,因?yàn)榫幋a方式,會(huì)出現(xiàn)部分日文的半角效果和全角效果是不同的。可以參考這個(gè)老哥寫的 http://www.dbjr.com.cn/article/276739.htm ,用的是JIS C 6220這種編碼方式。
那說到這里,其實(shí)你就已經(jīng)有一個(gè)概念了,數(shù)字中,每個(gè)數(shù)字在半角情況下都是占一個(gè)字符(我這里說占一個(gè)坑位可能會(huì)更好理解),默認(rèn)變量輸出都是半角,那兩位數(shù),就占兩個(gè)坑位。所以要讓1位數(shù)的顯示和兩位數(shù)的相同,讓1位數(shù)占兩個(gè)坑位不就行了嗎,把1位數(shù)轉(zhuǎn)成全角就行了。
看我這的效果,藍(lán)色的區(qū)域就是全角的效果,看得出是比之前好過一些,但也沒辦法完全等于兩個(gè)半角數(shù)字的寬度,還是差了點(diǎn)意思。
空格
除了用半角全角的思路去處理,還有辦法嗎?當(dāng)然有了,發(fā)揮想象力想想,要實(shí)現(xiàn)1位數(shù)和2位數(shù)對齊,我可以給1位數(shù)的兩邊加上空格,不就行了嗎,所以這空格也是有講究滴。
我們可以來看看Unicode中有哪些空格(只列舉部分):
- U+0020:ASCII空格
- U+00A0:不間斷空格
- U+2002:EN空格
- U+2003:EM空格
- U+2004:?EM空格
- U+2005:¼EM空格
- U+2006:?EM空格
- U+2007:數(shù)字空格
- U+2009:窄空格
- U+3000:文字空格
如果先了解了半角你就知道什么是en,什么是em,看這些的時(shí)候也會(huì)更有感覺。那這么多空格,我怎么知道哪個(gè)合適?那合不合適,試試不就知道了嗎,這不就和談女朋友一樣,去試試嘛
首先看到ASCII空格是合適的,會(huì)不會(huì)有人看到這里有答案就跑了 ,然后還有幾個(gè)看著也相近,我們可以單獨(dú)拿出來比一下。U+2004、U+2005和U+2009
發(fā)現(xiàn)都不合適,那這個(gè)代碼具體要怎么加呢,其實(shí)也很簡單,直接寫\u0020就行,比如我這里的布局就是這樣
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/blue" android:textColor="#000000" android:text="\u00206\u0020" android:textSize="26sp" />
其它
上面都是通過編碼的方向去解決這個(gè)問題,那還有其它方式嗎?當(dāng)然又有,其實(shí)一開始就有人想說了,用幾個(gè)textview去拼接,然后設(shè)置數(shù)字的textview固定寬度并且內(nèi)容居中。
這當(dāng)然可以。比如“倒計(jì)時(shí)30秒”這段文字,拆成3個(gè)textview,讓第二個(gè)textview固定寬度并且內(nèi)容居中,也能實(shí)現(xiàn)這個(gè)效果,但是這實(shí)現(xiàn)方式也太......,所以需要去探索不同的方式去處理。
那繪制可以嗎,我不用textview,我自定義一個(gè)view然后畫上去,我自己畫的話能很好把控各種細(xì)節(jié)的處理。我倒是覺得這是一個(gè)好的主意。這是通過繪制的方式去解決這個(gè)問題。
所以從這里可以看出,其實(shí)解決這個(gè)問題的方式有很多,可以從不同的角度去處理。
以上就是Android開發(fā)解決字符對齊問題方法的詳細(xì)內(nèi)容,更多關(guān)于Android開發(fā)字符對齊的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android編程實(shí)現(xiàn)通話錄音功能的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)通話錄音功能的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android廣播接收機(jī)制實(shí)現(xiàn)錄音功能的操作技巧,需要的朋友可以參考下2017-06-06Android開發(fā)中獲取View視圖寬與高的常用方法小結(jié)
這篇文章主要介紹了Android開發(fā)中獲取View視圖寬與高的常用方法,結(jié)合實(shí)例形式總結(jié)分析了Android獲取View視圖寬與高的三種常用方法及使用場景,需要的朋友可以參考下2017-10-10Android ViewPager循環(huán)播放廣告實(shí)例詳解
這篇文章主要介紹了Android ViewPager循環(huán)播放廣告條實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03Android自定義View實(shí)現(xiàn)縱向跑馬燈效果詳解
對于跑馬燈效果在我們?nèi)粘J褂玫腶pp中還是很常見的,比如外賣app的商家公告就使用了此效果,但是它是橫向滾動(dòng)的,橫向滾動(dòng)多適用于單條信息;但凡涉及到多條信息的滾動(dòng)展示,用縱向滾動(dòng)效果會(huì)有更好的用戶體驗(yàn),今天我們通過自定義View來看看如何實(shí)現(xiàn)縱向跑馬燈效果。2016-11-11Android嵌套滾動(dòng)與協(xié)調(diào)滾動(dòng)的實(shí)現(xiàn)方式匯總
如何實(shí)現(xiàn)這種協(xié)調(diào)滾動(dòng)的布局呢,我們使用CoordinatorLayout+AppBarLayout或者CoordinatorLayout+Behavior實(shí)現(xiàn),另一種方案是MotionLayout,我們看看都是怎么實(shí)現(xiàn)的吧2022-06-06java,Android:在eclipse中的快捷鍵(經(jīng)典收藏)
下面的快捷鍵是常用的,本人就本身喜好且常用的收拾一下,現(xiàn)在曬出來與大家分享,感興趣的朋友可以了解小哦2013-01-01微信或手機(jī)瀏覽器在線顯示office文件(已測試ios、android)
這篇文章主要介紹了微信或手機(jī)瀏覽器在線顯示office文件,已測試ios、android,感興趣的小伙伴們可以參考一下2016-06-06Android解決dialog彈出時(shí)無法捕捉Activity的back事件的方法
這篇文章主要介紹了Android解決dialog彈出時(shí)無法捕捉Activity的back事件的方法,涉及Android操作Activity事件的相關(guān)技巧,需要的朋友可以參考下2015-05-05Android統(tǒng)一依賴管理的三種方式總結(jié)
為了項(xiàng)目的管理,依賴包的紡一管理是必要的,下面這篇文章主要給大家介紹了關(guān)于Android統(tǒng)一依賴管理的三種方式,文中通過實(shí)例代碼和圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01