TextVie獲取顯示字符串的寬度之Android開(kāi)發(fā)
此文通過(guò)判斷textview要顯示的字符串的寬度是否超過(guò)我設(shè)定的寬度,若超過(guò)則執(zhí)行換行,具體代碼講解如下:
項(xiàng)目中的其他地方也有這樣的需求,故直接使用了那一塊的代碼。
public float getTextWidth(Context Context, String text, int textSize){ TextPaint paint = new TextPaint(); float scaledDensity = Context.getResource().getDisplayMetrics().scaledDensity; paint.setTextSize(scaledDensity * textSize); return paint.measureText(text); }
這里是使用了TextPaint的measureText方法。
不過(guò)在項(xiàng)目實(shí)踐上發(fā)現(xiàn)了這個(gè)方法存在一些問(wèn)題。當(dāng)字符串存在字母數(shù)字時(shí),就會(huì)有1-2像素的誤差。也正是這個(gè)誤差,導(dǎo)致代碼上判斷換行錯(cuò)誤,使得界面上顯示出錯(cuò)。
為了解決這個(gè)問(wèn)題,搜到了這篇文章 戳我
這篇文章中使用了另外一個(gè)方法測(cè)量,沒(méi)有new TextPaint,而是使用了TextView自己的TextPaint,這個(gè)Paint通過(guò)TextView.getPaint()方法獲得。
最后給出一個(gè)例子來(lái)看這兩種方法的差別。
測(cè)試機(jī)是MI4,xxdpi
public class MainActivity extends Activity { private final static String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
// 測(cè)試字符串
// 測(cè)試?yán)泳?5sp的字體大小
String text = "測(cè)試中文";
TextView textView = (TextView) findViewById(R.id.test); textView.setText(text); int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); textView.measure(spec, spec); // getMeasuredWidth int measuredWidth = textView.getMeasuredWidth(); // new textpaint measureText TextPaint newPaint = new TextPaint(); float textSize = getResources().getDisplayMetrics().scaledDensity * 15; newPaint.setTextSize(textSize); float newPaintWidth = newPaint.measureText(text); // textView getPaint measureText TextPaint textPaint = textView.getPaint(); float textPaintWidth = textPaint.measureText(text); Log.i(TAG, "測(cè)試字符串:" + text); Log.i(TAG, "getMeasuredWidth:" + measuredWidth); Log.i(TAG, "newPaint measureText:" + newPaintWidth); Log.i(TAG, "textView getPaint measureText:" + textPaintWidth); } }
當(dāng)測(cè)試字符串為: “測(cè)試中文”時(shí),結(jié)果如下
測(cè)試字符串:測(cè)試中文
getMeasuredWidth:180
measureText:180.0
getPaint measureText:180.0
當(dāng)測(cè)試字符串為: “測(cè)試英文abcd”時(shí),
測(cè)試字符串:測(cè)試英文abcd
getMeasuredWidth:279
newPaint measureText:278.0
textView getPaint measureText:279.0
可見(jiàn)使用textView的TextPaint調(diào)用measureText方法得到的寬度才是真正的寬度。
通過(guò)以上代碼可以順利解決TextView顯示字符串的寬度,希望對(duì)大家有所幫助。
- Android字符串和十六進(jìn)制相互轉(zhuǎn)化出現(xiàn)的中文亂碼問(wèn)題
- Android中判斷字符串中必須包含字母或者數(shù)字
- Android獲取手機(jī)屏幕寬高、狀態(tài)欄高度以及字符串寬高信息的方法
- android開(kāi)發(fā)教程之framework增加字符串資源和圖片等resource資源
- Android字符串轉(zhuǎn)Ascii碼實(shí)例代碼
- Android字符串資源文件format方法使用實(shí)例
- Android 加密解密字符串詳解
- Android TextView字體顏色設(shè)置方法小結(jié)
- Android編程實(shí)現(xiàn)TextView字體顏色設(shè)置的方法小結(jié)
- Android 字符串中某個(gè)字段可點(diǎn)擊和設(shè)置顏色的方法
相關(guān)文章
Android?鼠標(biāo)光標(biāo)的圖形合成原理實(shí)例探究
這篇文章主要為大家介紹了Android?鼠標(biāo)光標(biāo)的圖形合成原理實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01android查看網(wǎng)絡(luò)圖片的實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了android查看網(wǎng)絡(luò)圖片的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04Android LayoutInflater加載布局詳解及實(shí)例代碼
這篇文章主要介紹了Android LayoutInflater加載布局詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02Android 開(kāi)發(fā)中根據(jù)搜索內(nèi)容實(shí)現(xiàn)TextView中的文字部分加粗
最近遇到一個(gè)需求,需要做一個(gè)搜索功能。搜索的內(nèi)容需要加粗顯示。實(shí)現(xiàn)方法很簡(jiǎn)單,下面通過(guò)本文給大家分享Android 開(kāi)發(fā)中根據(jù)搜索內(nèi)容實(shí)現(xiàn)TextView中的文字部分加粗樣式,非常不錯(cuò),需要的朋友參考下2017-03-03Android仿支付寶中余額寶的數(shù)字動(dòng)畫(huà)效果
最近因?yàn)楣ぷ餍枰叻掠囝~寶數(shù)字動(dòng)畫(huà)效果,達(dá)到炫酷的數(shù)字動(dòng)畫(huà)效果,所以寫(xiě)出了分享給大家,有需要的朋友可以直接拿來(lái)用,下面一起來(lái)看看。2016-08-08android實(shí)現(xiàn)ViewPager的Indicator的實(shí)例代碼
本篇文章主要介紹了android實(shí)現(xiàn)ViewPager的Indicator的實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02用xutils3.0進(jìn)行下載項(xiàng)目更新
這篇文章主要介紹了用xutils3.0進(jìn)行下載項(xiàng)目更新的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08功能強(qiáng)大的Android滾動(dòng)控件RecyclerView
這篇文章主要為大家詳細(xì)介紹了功能強(qiáng)大的Android滾動(dòng)控件RecyclerView,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08