Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

魅族手机显示tag,圆角起始处向右偏移了一点,导致右边宽度被裁剪一点,附解决方法 #84

Open
woshiluoyong opened this issue Apr 21, 2021 · 0 comments

Comments

@woshiluoyong
Copy link

woshiluoyong commented Apr 21, 2021

image

显示就是这个样子的,其他手机正常,就魅族16s pro这个手机显示异常,down下源码排查了好久,最终怀疑应该是魅族手机对tagview的测量有问题,
最后解决方法代码如下
image
image

代码也附上哈,避免github抽风图片显示不出来,其他原样无关的代码以点点点代替哈:

class TagView extends androidx.appcompat.widget.AppCompatTextView {
    .......
    public TagView(Context context, final int state, CharSequence text) {
                super(context);
                setGravity(Gravity.CENTER);
                setText(text);
                setMaxLines(1);
                setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
    
                mState = state;
    
                setClickable(isAppendMode);
                setFocusable(state == STATE_INPUT);
                setFocusableInTouchMode(state == STATE_INPUT);
                setHint(state == STATE_INPUT ? inputHint : null);
                setMovementMethod(state == STATE_INPUT ? ArrowKeyMovementMethod.getInstance() : null);
    
                ........
    
                invalidatePaint();
    
                setPadding(horizontalPadding, verticalPadding, horizontalPadding, verticalPadding);
    
                //setLayoutParams(new ViewGroup.LayoutParams(TagGroup.LayoutParams.WRAP_CONTENT, TagGroup.LayoutParams.WRAP_CONTENT));
                setLayoutParams(new ViewGroup.LayoutParams(StephenToolUtils.getStringPixelWidth(getPaint(), text.toString()) + (horizontalPadding * 2),
                        StephenToolUtils.getStringPixelMaxHeightForInt(getPaint()) + (verticalPadding * 2)));
      }
      ..............
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int widthSize = MeasureSpec.getSize(widthMeasureSpec);
            int heightSize = MeasureSpec.getSize(heightMeasureSpec);
            setMeasuredDimension(widthSize, heightSize);
            //super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
        ..............
}

然后里面用到的StephenToolUtils相关方法如下:

//计算字符串的宽度(像素)
public static int getStringPixelWidth(Paint strPaint, String str) {
    return ((int) strPaint.measureText(str));
}

//计算字符串的高度(像素)
public static int getStringPixelHeight(Paint strPaint, String str) {
    Rect rect = new Rect();
    strPaint.getTextBounds(str, 0, str.length(), rect);
    return rect.height();
}

//计算字符串的高度(像素)(抵拢字体显示上下,没有空白)
public static int getStringPixelMinHeightForInt(Paint strPaint) {
    Paint.FontMetricsInt fontMetrics = strPaint.getFontMetricsInt();
    return fontMetrics.descent - fontMetrics.ascent;
}
//计算字符串的高度(像素)(字体显示上下处包含些许空白)
public static int getStringPixelMaxHeightForInt(Paint strPaint) {
    Paint.FontMetricsInt fontMetrics = strPaint.getFontMetricsInt();
    return fontMetrics.bottom - fontMetrics.top;
}

//计算字符串的高度(像素)(抵拢字体显示上下,没有空白)
public static float getStringPixelMinHeightForFloat(Paint strPaint) {
    Paint.FontMetrics fontMetrics = strPaint.getFontMetrics();
    return fontMetrics.descent - fontMetrics.ascent;
}
//计算字符串的高度(像素)(字体显示上下处包含些许空白)
public static float getStringPixelMaxHeightForFloat(Paint strPaint) {
    Paint.FontMetrics fontMetrics = strPaint.getFontMetrics();
    return fontMetrics.bottom - fontMetrics.top;
}
@woshiluoyong woshiluoyong changed the title 魅族手机显示tag,圆角起始处向右偏移了一点,导致右边宽度被裁剪一点 魅族手机显示tag,圆角起始处向右偏移了一点,导致右边宽度被裁剪一点,附解决方法 Apr 21, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant