实现EditText的后缀显示

作者: ONEWateR | 来源:发表于2016-03-14 17:35 被阅读558次

    有时候需要在EditText加上后缀,实现的方法比较简单,自定义EditText,在onDraw中canvas里,获取当前画笔信息,描绘后缀文本信息即可。唯一的难点在于如何定位。

    定位

    · x坐标
    这里我们需要计算文本的尾端至开端的距离,这段距离等于paddingLeft + 文本的宽度。其中文本的宽度我们可以通过 Paint.measureText() 来计算。

    ·y坐标
    通过getLineBounds获取字符基线(baseline)的Y坐标。

    拓展

    同理,我们可以用上述的方法实现前缀。
    不过需要重新对paddingLeft的值进行处理,相对来说比较麻烦点。

    代码

    以下是实现后缀的EditText:

    public class SuffixEditText extends EditText {
    
        protected ColorStateList mSuffixTextColor;
    
        protected String mSuffix = "";
    
        private int mPaintAlpha = 255;
    
        public SuffixEditText(Context context) {
            super(context);
        }
    
        public SuffixEditText(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public SuffixEditText(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
    
            if (mSuffix != null && getText().length() > 0) {
                Paint mPaint = getPaint();
                mPaint.setColor(mSuffixTextColor.getColorForState(getDrawableState(), 0));
                mPaint.setAlpha(mPaintAlpha);
                int lineBaseline = getLineBounds(0, null);
    
                canvas.drawText(mSuffix,
                        getPaint().measureText(getText().toString()) + getPaddingLeft(),
                        canvas.getClipBounds().top + lineBaseline,
                        mPaint);
            }
        }
    
        public void setSuffixTextAlpha(int paintAlpha) {
            mPaintAlpha = paintAlpha;
        }
    
        public void setSuffixTextColor(ColorStateList suffixTextColor) {
            mSuffixTextColor = suffixTextColor;
        }
    
        public void setSuffix(String suffix) {
            mSuffix = suffix;
            invalidate();
        }
    
    }
    

    应用

    比如我们可以实现一个自动补全的输入框 AutoHintEditText

    相关文章

      网友评论

        本文标题:实现EditText的后缀显示

        本文链接:https://www.haomeiwen.com/subject/apmflttx.html