for (int i = 0; i < string.length(); i++) { ch = string.charAt(i); float[] widths = new float[1]; String srt = String.valueOf(ch); mPaint.getTextWidths(srt, widths);
if (ch == "/n"){ m_iRealLine++; m_String.addElement(string.substring(istart, i)); istart = i + 1; w = 0; }else{ w += (int) (Math.ceil(widths[0])); if (w > m_iTextWidth){ m_iRealLine++; m_String.addElement(string.substring(istart, i)); istart = i; i--; w = 0; }else{ if (i == (string.length() - 1)){ m_iRealLine++; m_String.addElement(string.substring(istart, string.length())); } } } } m_iTextHeight=m_iRealLine*m_iFontHeight+2; canvas.setViewport(m_iTextWidth, m_iTextWidth); for (int i = 0, j = 0; i < m_iRealLine; i++, j++) { canvas.drawText((String)(m_String.elementAt(i)), x, y+m_iFontHeight * j, mPaint); } }
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int measuredHeight = measureHeight(heightMeasureSpec); int measuredWidth = measureWidth(widthMeasureSpec); this.setMeasuredDimension(measuredWidth, measuredHeight); this.setLayoutParams(new LinearLayout.LayoutParams(measuredWidth,measuredHeight)); super.onMeasure(widthMeasureSpec, heightMeasureSpec); }
private int measureHeight(int measureSpec) { int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); // Default size if no limits are specified. initHeight(); int result = m_iTextHeight; if (specMode == MeasureSpec.AT_MOST){ // Calculate the ideal size of your // control within this maximum size. // If your control fills the available // space return the outer bound. result = specSize; }else if (specMode == MeasureSpec.EXACTLY){ // If your control can fit within these bounds return that value. result = specSize; } return result; }
//大概计算 CY TextView所需高度 FontMetrics fm = mPaint.getFontMetrics(); int m_iFontHeight = (int) Math.ceil(fm.descent - fm.top) + (int)LineSpace; int line=0; int istart=0;
int w=0; for (int i = 0; i < string.length(); i++) { char ch = string.charAt(i); float[] widths = new float[1]; String srt = String.valueOf(ch); mPaint.getTextWidths(srt, widths);
if (ch == "/n"){ line++; istart = i + 1; w = 0; }else{ w += (int) (Math.ceil(widths[0])); if (w > m_iTextWidth){ line++; istart = i; i--; w = 0; }else{ if (i == (string.length() - 1)){ line++; } } } } m_iTextHeight=(line)*m_iFontHeight+2; }
private int measureWidth(int measureSpec) { int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec);
// Default size if no limits are specified. int result = 500; if (specMode == MeasureSpec.AT_MOST){ // Calculate the ideal size of your control // within this maximum size. // If your control fills the available space // return the outer bound. result = specSize; }else if (specMode == MeasureSpec.EXACTLY){ // If your control can fit within these bounds return that value. result = specSize; } return result; }