EditText魔改自定义SearchView

package com.geely.activity.widge;

import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.geely.main.R;


/**
 * Created by yetwish on 2015-05-11
 */

public class SearchView extends LinearLayout implements View.OnClickListener {

    /**
     * 输入框
     */
    private EditText etInput;


    /**
     * 上下文对象
     */
    private Context mContext;


    /**
     * 提示adapter (推荐adapter)
     */

    /**
     * 自动补全adapter 只显示名字
     */
    private ArrayAdapter<String> mAutoCompleteAdapter;

    /**
     * 搜索回调接口
     */
    private SearchViewListener mListener;

    /**
     * 设置搜索回调接口
     *
     * @param listener 监听者
     */
    public void setSearchViewListener(SearchViewListener listener) {
        mListener = listener;
    }


    public SearchView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        LayoutInflater.from(context).inflate(R.layout.search_layout, this);
        initViews();
    }

    private void initViews() {
        etInput = (EditText) findViewById(R.id.search_et_input);
        etInput.addTextChangedListener(new EditChangedListener());
        etInput.setOnClickListener(this);
        etInput.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
                if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                    notifyStartSearching(etInput.getText().toString());
                }
                return true;
            }
        });
    }

    /**
     * 通知监听者 进行搜索操作
     * @param text
     */
    private void notifyStartSearching(String text){
        if (mListener != null) {
            mListener.onSearch(etInput.getText().toString());
        }
        //隐藏软键盘
        InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
    }

    private class EditChangedListener implements TextWatcher {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
            if (!"".equals(charSequence.toString())) {
                //更新autoComplete数据
                if (mListener != null) {
                    mListener.onRefreshAutoComplete(charSequence + "");
                }
            }
        }

        @Override
        public void afterTextChanged(Editable editable) {
        }
    }


    public Object getText(){
       return etInput.getText();
    }



    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.search_et_input:

                break;
        }
    }

    /**
     * search view回调方法
     */
    public interface SearchViewListener {

        /**
         * 更新自动补全内容
         *
         * @param text 传入补全后的文本
         */
        void onRefreshAutoComplete(String text);

        /**
         * 开始搜索
         *
         * @param text 传入输入框的文本
         */
        void onSearch(String text);

//        /**
//         * 提示列表项点击时回调方法 (提示/自动补全)
//         */
//        void onTipsItemClick(String text);
    }

}


//
//import android.app.Activity;
//import android.content.Context;
//import android.text.Editable;
//import android.text.TextWatcher;
//import android.util.AttributeSet;
//import android.view.KeyEvent;
//import android.view.LayoutInflater;
//import android.view.View;
//import android.view.inputmethod.EditorInfo;
//import android.widget.AdapterView;
//import android.widget.Button;
//import android.widget.EditText;
//import android.widget.ImageView;
//import android.widget.LinearLayout;
//import android.widget.ListView;
//import android.widget.TextView;
//
//import com.yetwish.customsearchdemo.R;
//import com.yetwish.customsearchdemo.activity.adapter.SearchAdapter;
//import com.yetwish.customsearchdemo.activity.model.Bean;
//
///**
// * Created by yetwish on 2015-05-11
// */
//
//public class SearchView extends LinearLayout implements View.OnClickListener {
//
//    private EditText etInput;
//    private ImageView ivDelete;
//    private Button btnBack;
//    private Context mContext;
//
//    private ListView lvTips;
//    private SearchAdapter mHintAdapter;
//    private SearchAdapter mAutoCompleteAdapter;
//
//    private SearchViewListener mListener;
//
//    public void setSearchViewListener(SearchViewListener listener) {
//        mListener = listener;
//    }
//
//    public SearchView(Context context, AttributeSet attrs) {
//        super(context, attrs);
//        mContext = context;
//        LayoutInflater.from(context).inflate(R.layout.search_layout, this);
//        initViews();
//    }
//
//    private void initViews() {
//        etInput = (EditText) findViewById(R.id.search_et_input);
//        ivDelete = (ImageView) findViewById(R.id.search_iv_delete);
//        btnBack = (Button) findViewById(R.id.search_btn_back);
//        lvTips = (ListView) findViewById(R.id.search_lv_tips);
//
//        lvTips.setOnItemClickListener(new AdapterView.OnItemClickListener() {
//            @Override
//            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//                //set edit text
//                Bean currentBean = (Bean) lvTips.getAdapter().getItem(i);
//                etInput.setText(currentBean.getTitle());
//                //hint list view gone and result list view show
//                lvTips.setVisibility(View.GONE);
//                if (mListener != null) {
//                    mListener.onTipsItemClick();
//                }
//            }
//        });
//
//        ivDelete.setOnClickListener(this);
//        btnBack.setOnClickListener(this);
//
//        etInput.addTextChangedListener(new EditChangedListener());
//        etInput.setOnClickListener(this);
//        etInput.setOnEditorActionListener(new TextView.OnEditorActionListener() {
//            @Override
//            public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
//                if (actionId == EditorInfo.IME_ACTION_SEARCH) {
//                    if (mListener != null) {
//                        mListener.onSearch(etInput.getText().toString());
//                    }
//                }
//                return true;
//            }
//        });
//    }
//
//    /**
//     * 设置热搜版提示 adapter
//     */
//    public void setTipsHintAdapter(SearchAdapter adapter) {
//        this.mHintAdapter = adapter;
//        if (lvTips.getAdapter() == null) {
//            lvTips.setAdapter(mHintAdapter);
//        }
//    }
//
//    /**
//     * 设置自动补全adapter
//     */
//    public void setAutoCompleteAdapter(SearchAdapter adapter) {
//        this.mAutoCompleteAdapter = adapter;
//    }
//
//    private class EditChangedListener implements TextWatcher {
//        @Override
//        public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
//
//        }
//
//        @Override
//        public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
//            if (!"".equals(charSequence + "")) {
//                ivDelete.setVisibility(VISIBLE);
//                lvTips.setVisibility(VISIBLE);
//                if (mAutoCompleteAdapter != null && lvTips.getAdapter() != mAutoCompleteAdapter) {
//                    lvTips.setAdapter(mAutoCompleteAdapter);
//                } else {
//                    //更新autoComplete数据
//                    if (mListener != null) {
//                        mListener.onRefreshAutoComplete(charSequence + "");
//                    }
//                }
//            } else {
//                ivDelete.setVisibility(GONE);
//                if (mHintAdapter != null) {
//                    lvTips.setAdapter(mHintAdapter);
//                }
//                lvTips.setVisibility(GONE);
//            }
//
//        }
//
//        @Override
//        public void afterTextChanged(Editable editable) {
//
//        }
//    }
//
//    @Override
//    public void onClick(View view) {
//        switch (view.getId()) {
//            case R.id.search_et_input:
//                lvTips.setVisibility(VISIBLE);
//                break;
//            case R.id.search_iv_delete:
//                etInput.setText("");
//                ivDelete.setVisibility(GONE);
//                break;
//            case R.id.search_btn_back:
//                ((Activity) mContext).finish();
//                break;
//        }
//    }
//
//    /**
//     * search view回调方法
//     */
//    public interface SearchViewListener {
//
//        void onRefreshAutoComplete(String text);
//
//        void onSearch(String text);
//
//        void onTipsItemClick();
//    }
//
//}

自定义控件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">


        <FrameLayout
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/search_et_input"
                android:layout_gravity="center_vertical"
                android:drawableLeft="@drawable/search_icon"
                android:layout_width="match_parent"
                android:layout_height="65dp"
                android:background="@drawable/search_edittext_shape"
                android:textSize="24sp"
                android:imeOptions="actionSearch"
                android:inputType="text"
                android:hint="请输入关键字"/>

        </FrameLayout>

    </LinearLayout>

</LinearLayout>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值