Android開(kāi)發(fā)解決字符對(duì)齊問(wèn)題方法
前言
其實(shí)很多人都會(huì)碰到文本不對(duì)齊,文字不對(duì)齊的情況,但是只要不明顯被提出,一般都會(huì)置之不理。我關(guān)注這個(gè)問(wèn)題是因?yàn)橛袀€(gè)老哥問(wèn)我倒計(jì)時(shí)的時(shí)候,10以上和10以下會(huì)出現(xiàn)寬度變化,因?yàn)?位數(shù)變1位數(shù)確實(shí)會(huì)變化很大,有的人會(huì)說(shuō)1位數(shù)的時(shí)候前面補(bǔ)零,這也是一個(gè)方法,還有人說(shuō),你設(shè)置控件的寬度固定不就行了嗎?其實(shí)還真不好,即便你寬度固定,你的文字內(nèi)容也是會(huì)變的。
所以我就去想這個(gè)問(wèn)題,雖然不是一個(gè)什么大問(wèn)題,但當(dāng)你去探究,確實(shí)能收獲一些不一樣的東西。
基礎(chǔ)概念
首先回顧一些基礎(chǔ)的東西。
1字節(jié)是8位,所以1字節(jié)能有256種組合,說(shuō)到這個(gè),就能聯(lián)系出ASCII碼,ASCII碼都熟吧,就是數(shù)字和字母啊這些。然后ASCII碼的定義的符號(hào),是沒(méi)有到256的,這個(gè)也很容易理解,去看看ASCII碼的表就知道了。所以,ASCII碼中的符號(hào),都能用1個(gè)字節(jié)表示。
但是你的漢字是沒(méi)辦法用256表示的,我們中華文化博大精深,不是區(qū)區(qū)256能容納得下的。所以漢字得用2個(gè)字節(jié)表示,甚至3個(gè)字節(jié)表示。然后emoji好像是要占3個(gè)字節(jié)還是4個(gè)字節(jié)得,這個(gè)我記得不太清了。而且不同的編碼占的也不同。
回顧一下這些內(nèi)容主要是為了找找感覺(jué)。
半角和全角
這個(gè)相信大家也有點(diǎn)了解,我們平時(shí)用輸入法的時(shí)候就能進(jìn)行半角全角的切換。
簡(jiǎn)單來(lái)說(shuō),全角em是指一個(gè)字符占用兩個(gè)標(biāo)準(zhǔn)字符位置,半角en是指一個(gè)字符占用一個(gè)標(biāo)準(zhǔn)字符的位置。注意這里說(shuō)的是占多少的位置,和上面提的字節(jié)沒(méi)關(guān)系,不是說(shuō)你2個(gè)字節(jié)就占2個(gè)位置,1個(gè)字節(jié)只占一個(gè)位置。
但是一般半角和圓角都是針對(duì)ASCII碼里面的符號(hào)的(這個(gè)我沒(méi)找到相應(yīng)的概念,我是根據(jù)現(xiàn)象推導(dǎo)的)
所以先來(lái)看看直接設(shè)置半角和全角的效果

上面是半角,下面是全角,能明顯看出來(lái),中文的半角和全角都是占了兩個(gè)標(biāo)準(zhǔn)字符的位置,而ASCII碼中的符號(hào),在半角的情況下是占一個(gè),在全角的情況下是占兩個(gè)。
漢字是這樣,但是我在找資料的時(shí)候看到一個(gè)挺有意思的場(chǎng)景。就是日文,因?yàn)榫幋a方式,會(huì)出現(xiàn)部分日文的半角效果和全角效果是不同的??梢詤⒖歼@個(gè)老哥寫(xiě)的 http://chabaoo.cn/article/276739.htm ,用的是JIS C 6220這種編碼方式。
那說(shuō)到這里,其實(shí)你就已經(jīng)有一個(gè)概念了,數(shù)字中,每個(gè)數(shù)字在半角情況下都是占一個(gè)字符(我這里說(shuō)占一個(gè)坑位可能會(huì)更好理解),默認(rèn)變量輸出都是半角,那兩位數(shù),就占兩個(gè)坑位。所以要讓1位數(shù)的顯示和兩位數(shù)的相同,讓1位數(shù)占兩個(gè)坑位不就行了嗎,把1位數(shù)轉(zhuǎn)成全角就行了。

看我這的效果,藍(lán)色的區(qū)域就是全角的效果,看得出是比之前好過(guò)一些,但也沒(méi)辦法完全等于兩個(gè)半角數(shù)字的寬度,還是差了點(diǎn)意思。
空格
除了用半角全角的思路去處理,還有辦法嗎?當(dāng)然有了,發(fā)揮想象力想想,要實(shí)現(xiàn)1位數(shù)和2位數(shù)對(duì)齊,我可以給1位數(shù)的兩邊加上空格,不就行了嗎,所以這空格也是有講究滴。
我們可以來(lái)看看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ì)更有感覺(jué)。那這么多空格,我怎么知道哪個(gè)合適?那合不合適,試試不就知道了嗎,這不就和談女朋友一樣,去試試嘛

首先看到ASCII空格是合適的,會(huì)不會(huì)有人看到這里有答案就跑了 ,然后還有幾個(gè)看著也相近,我們可以單獨(dú)拿出來(lái)比一下。U+2004、U+2005和U+2009

發(fā)現(xiàn)都不合適,那這個(gè)代碼具體要怎么加呢,其實(shí)也很簡(jiǎn)單,直接寫(xiě)\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"
/>其它
上面都是通過(guò)編碼的方向去解決這個(gè)問(wèn)題,那還有其它方式嗎?當(dāng)然又有,其實(shí)一開(kāi)始就有人想說(shuō)了,用幾個(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然后畫(huà)上去,我自己畫(huà)的話能很好把控各種細(xì)節(jié)的處理。我倒是覺(jué)得這是一個(gè)好的主意。這是通過(guò)繪制的方式去解決這個(gè)問(wèn)題。
所以從這里可以看出,其實(shí)解決這個(gè)問(wèn)題的方式有很多,可以從不同的角度去處理。
以上就是Android開(kāi)發(fā)解決字符對(duì)齊問(wèn)題方法的詳細(xì)內(nèi)容,更多關(guān)于Android開(kāi)發(fā)字符對(duì)齊的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android編程實(shí)現(xiàn)通話錄音功能的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)通話錄音功能的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android廣播接收機(jī)制實(shí)現(xiàn)錄音功能的操作技巧,需要的朋友可以參考下2017-06-06
Android開(kāi)發(fā)中獲取View視圖寬與高的常用方法小結(jié)
這篇文章主要介紹了Android開(kāi)發(fā)中獲取View視圖寬與高的常用方法,結(jié)合實(shí)例形式總結(jié)分析了Android獲取View視圖寬與高的三種常用方法及使用場(chǎng)景,需要的朋友可以參考下2017-10-10
Android ViewPager循環(huán)播放廣告實(shí)例詳解
這篇文章主要介紹了Android ViewPager循環(huán)播放廣告條實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03
Android自定義View實(shí)現(xiàn)縱向跑馬燈效果詳解
對(duì)于跑馬燈效果在我們?nèi)粘J褂玫腶pp中還是很常見(jiàn)的,比如外賣(mài)app的商家公告就使用了此效果,但是它是橫向滾動(dòng)的,橫向滾動(dòng)多適用于單條信息;但凡涉及到多條信息的滾動(dòng)展示,用縱向滾動(dòng)效果會(huì)有更好的用戶(hù)體驗(yàn),今天我們通過(guò)自定義View來(lái)看看如何實(shí)現(xiàn)縱向跑馬燈效果。2016-11-11
Android嵌套滾動(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-06
java,Android:在eclipse中的快捷鍵(經(jīng)典收藏)
下面的快捷鍵是常用的,本人就本身喜好且常用的收拾一下,現(xiàn)在曬出來(lái)與大家分享,感興趣的朋友可以了解小哦2013-01-01
微信或手機(jī)瀏覽器在線顯示office文件(已測(cè)試ios、android)
這篇文章主要介紹了微信或手機(jī)瀏覽器在線顯示office文件,已測(cè)試ios、android,感興趣的小伙伴們可以參考一下2016-06-06
Android解決dialog彈出時(shí)無(wú)法捕捉Activity的back事件的方法
這篇文章主要介紹了Android解決dialog彈出時(shí)無(wú)法捕捉Activity的back事件的方法,涉及Android操作Activity事件的相關(guān)技巧,需要的朋友可以參考下2015-05-05
Android統(tǒng)一依賴(lài)管理的三種方式總結(jié)
為了項(xiàng)目的管理,依賴(lài)包的紡一管理是必要的,下面這篇文章主要給大家介紹了關(guān)于Android統(tǒng)一依賴(lài)管理的三種方式,文中通過(guò)實(shí)例代碼和圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01

