自訂View 實現軟鍵盤實現搜尋,自訂view

來源:互聯網
上載者:User

自訂View 實現軟鍵盤實現搜尋,自訂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);                }            }        });

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.