个人信息排版左右对齐的TextView

在很多应用中都会存在个人信息或者一些资料型排版   , 而我们为了界面的美观 常常会对上下两个TextView的左右对齐   以保持界面美观 

最初可能会用 "空格" 去填充空余位置   但因各手机分辨率不一样  "空格" 产生的效果也不理想,  所以会想到重写TextView来做到这一点。

第一次写  , 不多说   上代码和效果图   

@Override
  protected void onDraw(Canvas canvas) {
    TextPaint textPaint = getPaint();
    textPaint.setColor(getCurrentTextColor());
    textPaint.drawableState = getDrawableState();
    mViewWidth = getMeasuredWidth();
    String text = getText().toString();
    int length = text.length();//文本长度
    mLineY = getTextSize();
    float drawY = mLineY;
    int paddingLeft = getPaddingLeft();
    int paddingRight = getPaddingRight();
    int paddingTop = getPaddingTop();
    int paddingBottom = getPaddingBottom();//暂未用到
    drawY += paddingTop;
    mViewWidth = mViewWidth - paddingLeft - paddingRight;
    int spaceWidth = 0;
    int colonWidth = 0;//冒号的宽度
//是否存在冒号 包括中英 冒号   因为一般来说  冒号是跟在最后一个字符后面的  所以在计算宽度的时候需要除去
if(text.contains(":")){
colonWidth = (int)textPaint.measureText(":"); }else if(text.contains(":"))
{ colonWidth = (int)textPaint.measureText(":");
 }
 int spaceLenght = 1; 
if(colonWidth != 0){
 spaceLenght = 2; 
} 
//计算每个空格的宽度
 spaceWidth = (int) ((mViewWidth - textPaint.measureText(text) - colonWidth) / (length - spaceLenght));
 int drawX = paddingLeft; for (int i = 0 ; i < length ; i ++){//循环画每一个字
 String chars = text.substring(i , (i + 1)); 
if(i != 0 ) {
drawX = paddingLeft + (int) textPaint.measureText(text.substring(0, i));
//获取字的宽度 大小
if (isSpace) {//是否需要填充空格 这里默认需要
 if(colonWidth != 0 && i == (length -1)){
 drawX += ((i-1) * spaceWidth);
}else {
 drawX += (i * spaceWidth);
  }
     }
   }
 canvas.drawText(chars , drawX , drawY ,textPaint); } }
 
  
 
  
 
  

 
  

布局文件  随意写了下  




  

  

  

  




//注明 暂不支持英文单词

个人信息排版左右对齐的TextView_第1张图片

你可能感兴趣的:(个人信息排版左右对齐的TextView)