get Draw String by row - Android android.text

Android examples for android.text:TextPaint

Description

get Draw String by row

Demo Code

import java.util.ArrayList;
import java.util.List;

import android.text.TextPaint;
import android.text.TextUtils;

public class Main {

  public static List<String> getDrawRowStr(String text, int maxWPix, TextPaint paint) {
    String[] texts = null;//www . j  a va2s.  c o  m
    if (text.indexOf("\n") != -1) {
      texts = text.split("\n");
    } else {
      texts = new String[1];
      texts[0] = text;
    }
    List<String> mStrList = new ArrayList<String>();

    for (int i = 0; i < texts.length; i++) {
      String textLine = texts[i];
      while (true) {
        int endIndex = subStringLength(textLine, maxWPix, paint);
        if (endIndex <= 0) {
          mStrList.add(textLine);
        } else {
          if (endIndex == textLine.length() - 1) {
            mStrList.add(textLine);
          } else {
            mStrList.add(textLine.substring(0, endIndex + 1));
          }

        }
        if (textLine.length() > endIndex + 1) {
          textLine = textLine.substring(endIndex + 1);
        } else {
          break;
        }
      }
    }

    return mStrList;
  }

  public static int subStringLength(String str, int maxPix, TextPaint paint) {
    if (TextUtils.isEmpty(str)) {
      return 0;
    }
    int currentIndex = 0;
    for (int i = 0; i < str.length(); i++) {
      String temp = str.substring(0, i + 1);
      float valueLength = paint.measureText(temp);
      if (valueLength > maxPix) {
        currentIndex = i - 1;
        break;
      } else if (valueLength == maxPix) {
        currentIndex = i;
        break;
      }
    }
    if (currentIndex == 0) {
      currentIndex = str.length() - 1;
    }
    return currentIndex;
  }

}

Related Tutorials