溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android如何解決字符對(duì)齊問(wèn)題

發(fā)布時(shí)間:2023-03-01 11:18:59 來(lái)源:億速云 閱讀:115 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要講解了“Android如何解決字符對(duì)齊問(wèn)題”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Android如何解決字符對(duì)齊問(wèn)題”吧!

基礎(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è)我記得不太清了。而且不同的編碼占的也不同。

半角和全角

這個(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è)置半角和全角的效果

Android如何解決字符對(duì)齊問(wèn)題

上面是半角,下面是全角,能明顯看出來(lái),中文的半角和全角都是占了兩個(gè)標(biāo)準(zhǔn)字符的位置,而ASCII碼中的符號(hào),在半角的情況下是占一個(gè),在全角的情況下是占兩個(gè)。

漢字是這樣,但是我在找資料的時(shí)候看到一個(gè)挺有意思的場(chǎng)景。就是日文,因?yàn)榫幋a方式,會(huì)出現(xiàn)部分日文的半角效果和全角效果是不同的。

那說(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)成全角就行了。

Android如何解決字符對(duì)齊問(wè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è)合適?那合不合適,試試不就知道了嗎,這不就和談女朋友一樣,去試試嘛

Android如何解決字符對(duì)齊問(wèn)題

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

Android如何解決字符對(duì)齊問(wèn)題

發(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如何解決字符對(duì)齊問(wèn)題”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Android如何解決字符對(duì)齊問(wèn)題這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI