Android TextView两端对齐解决办法
今天遇到一个关于TextView文字两端对齐其实方案,大家都知道原生控件是不能满足我们的需求的,因此需要自定义View
下面看下效果图
package com.example.VerticalMarqueeTextView.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.text.TextPaint; import android.text.TextUtils; import android.util.AttributeSet; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.widget.TextView; /** * Created by John on 2017/2/9. */ public class WordAlignTextView extends TextView { private float textSize; private float textLineHeight; //顶部 private int top; //y轴 private int y; //线 private int lines; //底部 private int bottom; //右边 private int right; //左边 private int left; //线字 private int lineDrawWords; private char[] textCharArray; private float singleWordWidth; //每个字符的空隙 private float lineSpacingExtra; private boolean isFirst = true; public WordAlignTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { initTextInfo(); return true; } }); } public WordAlignTextView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public WordAlignTextView(Context context) { this(context, null, 0); } public void initTextInfo() { textSize = getTextSize(); //获取线的高度 textLineHeight = getLineHeight(); left = 0; right = getRight(); y = getTop(); // 要画的宽度 int drawTotalWidth = right - left; String text = getText().toString(); if (!TextUtils.isEmpty(text) && isFirst) { textCharArray = text.toCharArray(); TextPaint mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); mTextPaint.density = getResources().getDisplayMetrics().density; mTextPaint.setTextSize(textSize); // 获取单个单词的的宽度 singleWordWidth = mTextPaint.measureText("一") + lineSpacingExtra; // 每行可以放多少个字符 lineDrawWords = (int) (drawTotalWidth / singleWordWidth); int length = textCharArray.length; lines = length / lineDrawWords; if ((length % lineDrawWords) > 0) { lines = lines + 1; } first = false; ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) getLayoutParams(); int totalHeight = (int) (lines*textLineHeight+textLineHeight*2 + getPaddingBottom()+getPaddingTop()+layoutParams.bottomMargin+layoutParams.topMargin); setHeight(totalHeight); } } @Override protected void onDraw(Canvas canvas) { bottom = getBottom(); int drawTotalLine = lines; if(maxLine!=0&&drawTotalLine>maxLine){ drawTotalLine = maxLine; } for (int i = 0; ilength) { endTextIndex = length; y += textLineHeight; } else { y += textLineHeight; } for (; startIndex = 0x4e00) && (c <= 0x9FA5)) { flag = true; } } return flag; } public static String ToDBC(String input) { // 导致TextView异常换行的原因:安卓默认数字、字母不能为第一行以后每行的开头字符,因为数字、字母为半角字符 // 所以我们只需要将半角字符转换为全角字符即可 char c[] = input.toCharArray(); for (int i = 0; i
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!