当前位置: 代码迷 >> Android >> 自定义View 实现软键盘实现搜寻
  详细解决方案

自定义View 实现软键盘实现搜寻

热度:32   发布时间:2016-04-24 12:06:13.0
自定义View 实现软键盘实现搜索

1. xml文件中加入自定义 搜索view


<com.etoury.etoury.ui.view.IconCenterEditText            android:id="@+id/search_et"            style="@style/StyleEditText"             android:hint="搜索景点信息"            />

 

2. 自定义的   view java文件

IconCenterEditText.java

package com.etoury.etoury.ui.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.drawable.Drawable;import android.text.TextUtils;import android.util.AttributeSet;import android.util.Log;import android.view.KeyEvent;import android.view.View;import android.view.inputmethod.InputMethodManager;import android.widget.EditText;public class IconCenterEditText extends EditText implements View.OnFocusChangeListener, View.OnKeyListener {    private static final String TAG = IconCenterEditText.class.getSimpleName();    /**     * 是否是默认图标再左边的样式     */    private boolean isLeft = false;    /**     * 是否点击软键盘搜索     */    private boolean pressSearch = false;    /**     * 软键盘搜索键监听     */    private OnSearchClickListener listener;    public void setOnSearchClickListener(OnSearchClickListener listener) {        this.listener = listener;    }    public IconCenterEditText(Context context) {        this(context, null);        init();    }    public IconCenterEditText(Context context, AttributeSet attrs) {        this(context, attrs, android.R.attr.editTextStyle);        init();    }    public IconCenterEditText(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        init();    }    private void init() {        setOnFocusChangeListener(this);        setOnKeyListener(this);    }    @Override    protected void onDraw(Canvas canvas) {        if (isLeft) { // 如果是默认样式,则直接绘制            super.onDraw(canvas);        } else { // 如果不是默认样式,需要将图标绘制在中间            Drawable[] drawables = getCompoundDrawables();            Drawable drawableLeft = drawables[0];            Drawable drawableRight = drawables[2];            translate(drawableLeft, canvas);            translate(drawableRight, canvas);//            if (drawableLeft != null) {//                float textWidth = getPaint().measureText(getHint().toString());//                int drawablePadding = getCompoundDrawablePadding();//                int drawableWidth = drawableLeft.getIntrinsicWidth();//                float bodyWidth = textWidth + drawableWidth + drawablePadding;////                canvas.translate((getWidth() - bodyWidth - getPaddingLeft() - getPaddingRight()) / 2, 0);//            }//            if (drawableRight != null) {//                float textWidth = getPaint().measureText(getHint().toString()); // 文字宽度//                int drawablePadding = getCompoundDrawablePadding(); // 图标间距//                int drawableWidth = drawableRight.getIntrinsicWidth(); // 图标宽度//                float bodyWidth = textWidth + drawableWidth + drawablePadding;//                setPadding(getPaddingLeft(), getPaddingTop(), (int)(getWidth() - bodyWidth - getPaddingLeft()), getPaddingBottom());//                canvas.translate((getWidth() - bodyWidth - getPaddingLeft()) / 2, 0);//            }            super.onDraw(canvas);        }    }    public void translate(Drawable drawable, Canvas canvas) {        if (drawable != null) {            float textWidth = getPaint().measureText(getHint().toString());            int drawablePadding = getCompoundDrawablePadding();            int drawableWidth = drawable.getIntrinsicWidth();            float bodyWidth = textWidth + drawableWidth + drawablePadding;            if (drawable == getCompoundDrawables()[0]) {                canvas.translate((getWidth() - bodyWidth - getPaddingLeft() - getPaddingRight()) / 2, 0);            } else {                setPadding(getPaddingLeft(), getPaddingTop(), (int)(getWidth() - bodyWidth - getPaddingLeft()), getPaddingBottom());                canvas.translate((getWidth() - bodyWidth - getPaddingLeft()) / 2, 0);            }        }    }    @Override    public void onFocusChange(View v, boolean hasFocus) {        Log.d(TAG, "onFocusChange execute");        // 恢复EditText默认的样式        if (!pressSearch && TextUtils.isEmpty(getText().toString())) {            isLeft = hasFocus;        }    }    @Override    public boolean onKey(View v, int keyCode, KeyEvent event) {        pressSearch = (keyCode == KeyEvent.KEYCODE_ENTER);        if (pressSearch && listener != null) {            /*隐藏软键盘*/            InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);            if (imm.isActive()) {                imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);            }            listener.onSearchClick(v);        }        return false;    }    public interface OnSearchClickListener {        void onSearchClick(View view);    }}

3. style

</style>               <style name="StyleEditText">            <item name="android:layout_width">match_parent</item>            <item name="android:layout_height">wrap_content</item>            <item name="android:background">@drawable/bg_search_bar</item>            <item name="android:drawablePadding">5dp</item>            <item name="android:gravity">center_vertical</item>            <item name="android:imeOptions">actionSearch</item>            <item name="android:drawableLeft">@drawable/icon_search</item>            <item name="android:padding">5dp</item>            <item name="android:singleLine">true</item>            <item name="android:textColorHint">@color/grey</item>            <item name="android:textSize">16sp</item>            <item name="android:hint">搜索</item>        </style>

4. bg_search_bar.xml

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android">    <solid android:color="@android:color/white" />    <stroke        android:width="1px"        android:color="@android:color/darker_gray" />    <corners android:radius="3dp" /></shape>

5. activity 中加上代码

private IconCenterEditText search_et;
search_et = (IconCenterEditText) findViewById(R.id.search_et);
search_et.setOnSearchClickListener(new OnSearchClickListener() {            @Override            public void onSearchClick(View view) {                // TODO Auto-generated method stub                String texts = search_et.getText().toString().trim();                if ("".equals(texts)) {                    ToastUtil.showToast("请输入您要搜索的内容");                } else {                    //根据你的文字内容实现跳转
                    Intent intent = new Intent(context,                            SearchWordActivity.class);                    // intent.putExtra("searchMode", 1);                    intent.putExtra("searchWord", texts);                    context.startActivity(intent);                }            }        });
  相关解决方案