欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android開發(fā)解決字符對齊問題方法

 更新時(shí)間:2023年03月01日 09:57:32   作者:流浪漢kylin  
這篇文章主要為大家介紹了Android開發(fā)解決字符對齊問題方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

其實(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)文章

最新評論