萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 安卓開發 >> Android對字符串的處理

Android對字符串的處理

 需求:實現長文字的滾動停留,所以需要將長字符串截取成指定TextView長度的字符串數組 ,然後使用ViewFilpper實現。

分割代碼如下:
/* 
 * 根據要求分割字符串 
 */ 
public static String[] getLineStrs(String content, Paint paint, float width, float textSize) { 
    paint.setTextSize(textSize);//Note1:測量的工具首先需要定義單位 
 
    int index = 0; 
    int start = 0; 
    int end = 0; 
     
    float textLength = paint.measureText(content); 
 
    int lineNum = (int) Math.ceil(1.5*textLength / width) ;//Note2:計算行數因為判斷的不准確,所以增加余量1.5倍,最後處理 
    String[] mSplitTextParts = new String[lineNum]; 
     
    for (int i = 0; i <= content.length(); i++) { 
        end = i; 
 
        float measureLength = paint.measureText(content, start, end);//Note3:[start,end)范圍的字符串 
 
        if (measureLength >= width) { 
                mSplitTextParts[index] = content.substring(start, end);//Note4:[start,end)范圍的字符串 
                start = end; 
                index++;     
        } 
 
        if (end == content.length()) { 
            mSplitTextParts[index] = content.substring(start, end); 
            return Arrays.copyOf(mSplitTextParts, index);//Note5:因為行數判斷的不准確,所以需要清除掉未賦值的null值字符串 
        } 
} 
    return null; 

猜測分割不准的原因是:中英文混雜。可能是半角全角的問題。
測試後發現:
1, 全英文狀態下,半角全角計算的標准行數(未經過1.5倍的余量修正)都ok。
2, 全中文狀態下,半角全角計算的標准行數(未經過1.5倍的余量修正)都ok。
3, 在中英文混雜狀態下,計算的標准行數比實際截取的行數要大。在這裡存疑。

copyright © 萬盛學電腦網 all rights reserved