美文网首页
实现EditText ImageHint

实现EditText ImageHint

作者: 林伯任 | 来源:发表于2017-05-13 15:01 被阅读78次

    1. 要实现效果

    image.png

    2. 方式一: 用ImageSpan

            ImageSpan imageHint = new ImageSpan(mContext, R.drawable.edit_profile_name);
            SpannableString spannableString = new SpannableString("  请输入你内容");
            spannableString.setSpan(imageHint, 0, 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
            mFeedbackContent.setHint(spannableString);
    

    3. 方式二: 自定义控件 onDraw

    package com.finals.teltem.view;
     
    import android.content.Context;
    import android.content.res.TypedArray;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.graphics.Paint.FontMetrics;
    import android.graphics.drawable.Drawable;
    import android.util.AttributeSet;
    import android.widget.EditText;
     
    import com.finals.teltem.R;
     
    public class SearchView extends EditText {
     
        float searchSize = 0;
        float textSize = 0;
        int textColor = 0xFF000000;
        Drawable mDrawable;
        Paint paint;
     
        public SearchView(Context context, AttributeSet attrs) {
            super(context, attrs);
            InitResource(context, attrs);
            InitPaint();
        }
     
        private void InitResource(Context context, AttributeSet attrs) {
            TypedArray mTypedArray = context.obtainStyledAttributes(attrs, R.styleable.searchedit);
            float density = context.getResources().getDisplayMetrics().density;
            searchSize = mTypedArray.getDimension(R.styleable.searchedit_imagewidth, 18 * density + 0.5F);
            textColor = mTypedArray.getColor(R.styleable.searchedit_textColor, 0xFF848484);
            textSize = mTypedArray.getDimension(R.styleable.searchedit_textSize, 14 * density + 0.5F);
            mTypedArray.recycle();
        }
     
        private void InitPaint() {
            paint = new Paint(Paint.ANTI_ALIAS_FLAG);
            paint.setColor(textColor);
            paint.setTextSize(textSize);
        }
     
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            DrawSearchIcon(canvas);
        }
     
        private void DrawSearchIcon(Canvas canvas) {
            if (this.getText().toString().length() == 0) {
                float textWidth = paint.measureText("搜索");
                float textHeight = getFontLeading(paint);
     
                float dx = (getWidth() - searchSize - textWidth - 8) / 2;
                float dy = (getHeight() - searchSize) / 2;
     
                canvas.save();
                canvas.translate(getScrollX() + dx, getScrollY() + dy);
                if (mDrawable != null) {
                    mDrawable.draw(canvas);
                }
                canvas.drawText("搜索", getScrollX() + searchSize + 8, getScrollY() + (getHeight() - (getHeight() - textHeight) / 2) - paint.getFontMetrics().bottom - dy, paint);
                canvas.restore();
            }
        }
     
        @Override
        protected void onAttachedToWindow() {
            super.onAttachedToWindow();
            if (mDrawable == null) {
                try {
                    mDrawable = getContext().getResources().getDrawable(com.finals.teltem.R.drawable.serarch);
                    mDrawable.setBounds(0, 0, (int) searchSize, (int) searchSize);
                } catch (Exception e) {
     
                }
            }
        }
     
        @Override
        protected void onDetachedFromWindow() {
            if (mDrawable != null) {
                mDrawable.setCallback(null);
                mDrawable = null;
            }
            super.onDetachedFromWindow();
        }
     
        public float getFontLeading(Paint paint) {
            FontMetrics fm = paint.getFontMetrics();
            return fm.bottom - fm.top;
        }
     
    }
    

    相关文章

      网友评论

          本文标题:实现EditText ImageHint

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