package com.thankcreate.care.control; import com.thankcreate.care.R; import android.content.Context; import android.text.Editable; import android.text.TextWatcher; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.animation.TranslateAnimation; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; public class SearchBarWidget extends LinearLayout { private ImageButton mSearchCancelButton; //private ImageView mSearchRightImageView; private EditText mSearchEditText; private onSearchListener mOnSearchListener = null; public interface onSearchListener { public void onSearchChange(String search); } public SearchBarWidget(Context context) { super(context); viewInit(context); logicInit(); } public SearchBarWidget(Context context, AttributeSet attrs) { super(context, attrs); viewInit(context); logicInit(); } /*** 界面初始化 **/ private void viewInit(Context context) { inflate(context,R.layout.search_bar_layout, this); mSearchCancelButton = (ImageButton) findViewById(R.id.search_cancel_button);// mSearchEditText = (EditText)findViewById(R.id.search_text); setTextEditable(true); } /*** 逻辑初始化 **/ private void logicInit() { if(mSearchCancelButton != null) { mSearchCancelButton.setOnClickListener(mSearchCancelClickListener); } if(mSearchEditText != null) { mSearchEditText.setOnTouchListener(mSearchEditTextOnClickListener); mSearchEditText.addTextChangedListener(mSearchTextWatcher); } setTextEditable(false); } /** 取消键点击事件处理 **/ private View.OnClickListener mSearchCancelClickListener = new View.OnClickListener() { @Override public void onClick(View v) { InputMethodManager imm = (InputMethodManager)getContext().getSystemService( Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mSearchEditText.getWindowToken(), 0); if(mSearchCancelButton != null && mSearchCancelButton.getVisibility() == View.VISIBLE) { setSearchBarState(LAYOUT_STATE_VIEW); } } }; /** EditText Touch事件处理 **/ private View.OnTouchListener mSearchEditTextOnClickListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if(mSearchCancelButton!= null && mSearchCancelButton.getVisibility() != View.VISIBLE) { setSearchBarState(LAYOUT_STATE_EDIT); } return false; } }; /** 搜索条文字变化监听器 ***/ private TextWatcher mSearchTextWatcher = new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if(s.toString().length() == 0) { mSearchCancelButton.setVisibility(View.GONE); } else { mSearchCancelButton.setVisibility(View.VISIBLE); } if(mOnSearchListener != null) { mOnSearchListener.onSearchChange(s.toString()); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } }; /*** * 设置搜索框是否可以编辑 * @param isEditable */ private void setTextEditable(boolean isEditable) { if(isEditable) { mSearchEditText.setFocusableInTouchMode(true); mSearchEditText.setFocusable(true); mSearchEditText.requestFocus(); } else { mSearchEditText.clearFocus(); mSearchEditText.setFocusable(false); } } private static final int LAYOUT_STATE_VIEW = 1; private static final int LAYOUT_STATE_EDIT = 2; /** * 设置搜索条的状态 * <p>浏览状态 LAYOUT_STATE_VIEW 只显示搜索条 同时失去焦点</p> * <p>编辑状态 LAYOUT_STATE_EDIT 显示搜索条和取消按钮 获取焦点</p> * @param state */ private void setSearchBarState(int state) { switch (state) { case LAYOUT_STATE_VIEW: mSearchEditText.setText(""); setTextEditable(false); mSearchCancelButton.setVisibility(View.GONE); break; case LAYOUT_STATE_EDIT: setTextEditable(true); break; default: break; } } public void setOnSearchListener(onSearchListener listener) { if(listener != null) { mOnSearchListener = listener; } } }