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>