美文网首页新样式自定义views Android知识
Android中搜索图标和文字居中的EditText

Android中搜索图标和文字居中的EditText

作者: 蒽香之气 | 来源:发表于2017-06-08 14:32 被阅读340次

    效果图:


    image.png

    需要自定义view,具体实现如下:

    import android.widget.EditText;
    
    import android.content.Context;
    import android.content.res.TypedArray;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.graphics.drawable.Drawable;
    import android.util.AttributeSet;
    
    import com.example.administrator.mahu.R;
    
    public class SearchView extends EditText {
    
        private float searchSize = 0;
        private float textSize = 0;
        private int textColor = 0xFF000000;
        private Drawable mDrawable;
        private 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(R.mipmap.search);
                    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) {
            Paint.FontMetrics fm = paint.getFontMetrics();
            return fm.bottom - fm.top;
        }
    
    }
    

    在values---attrs下添加

    <declare-styleable name="searchedit">
            <attr name="imagewidth" format="dimension" />
            <attr name="textSize" format="dimension" />
            <attr name="textColor" format="color" />
     </declare-styleable>
    

    搜索图片


    search.png

    在布局文件中调用如下

    <com.example.administrator.mahu.view.SearchView
            android:id="@+id/search"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_below="@+id/layout"
            android:background="@drawable/search_kuang"
            android:textSize="17sp"
            android:paddingLeft="5dp"
            android:singleLine="true"
            android:imeOptions="actionSearch"
            />
    

    相关文章

      网友评论

        本文标题:Android中搜索图标和文字居中的EditText

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