/* * Copyright (c) 2020 WildFireChat. All rights reserved. */ package cn.wildfire.chat.kit.widget; import android.content.Context; import android.text.Editable; import android.text.SpannableString; import android.text.TextUtils; import android.text.TextWatcher; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.View; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import cn.wildfire.chat.kit.R; import cn.wildfire.chat.kit.R2; public class SearchView extends FrameLayout { @BindView(R2.id.editText) EditText mEditText; @BindView(R2.id.search_cancel) View mCancelView; @OnClick(R2.id.search_cancel) void onCancelClick() { mEditText.setText(""); if (cancelClickListener != null) { cancelClickListener.onCalcelClick(); } } private OnQueryTextListener mListener; private OnActionQueryListener mActionListener; private OnCancelClickListener cancelClickListener; public SearchView(@NonNull Context context) { this(context, null); } public SearchView(@NonNull Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public SearchView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { inflate(getContext(), R.layout.search_view, this); ButterKnife.bind(this); mEditText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { search(s.toString()); handleCancelView(s.toString()); } }); mEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_SEARCH || (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN)) { // 先隐藏键盘 ((InputMethodManager) mEditText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(mEditText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); if (mActionListener != null) { mActionListener.onQueryTextChange(mEditText.getText().toString()); } return true; } return false; } }); } private void search(String s) { if (mListener != null) { mListener.onQueryTextChange(s); } } public SearchView setmActionListener(OnActionQueryListener mActionListener) { this.mActionListener = mActionListener; return this; } private void handleCancelView(String s) { if (TextUtils.isEmpty(s)) { mCancelView.setVisibility(View.GONE); } else { mCancelView.setVisibility(View.VISIBLE); } } public String getQueryContent() { return mEditText.getText().toString(); } public void setQuery(String s) { mEditText.setText(s); } public void setHint(String s) { SpannableString hintStr = new SpannableString(s); mEditText.setHint(hintStr); } public void setOnQueryTextListener(OnQueryTextListener listener) { mListener = listener; } public OnCancelClickListener getCancelClickListener() { return cancelClickListener; } public void setCancelClickListener(OnCancelClickListener cancelClickListener) { this.cancelClickListener = cancelClickListener; } public interface OnQueryTextListener { void onQueryTextChange(String s); } public interface OnActionQueryListener { void onQueryTextChange(String s); } public interface OnCancelClickListener { void onCalcelClick(); } }