Android EditText實現(xiàn)關鍵詞批量搜索示例
今天在項目中用到了用到了一種特殊的EditText,當用戶在EditText中輸入內容,點擊搜索按鈕的時候,輸入的內容能夠高亮,然后添加到輸入的容器中。刪除的時候,能夠將容器中的關鍵詞逐一刪除。附上代碼:
SearchEditText.java
package com.jackie.searchresultedittext; import android.content.Context; import android.graphics.Color; import android.util.AttributeSet; import android.view.Gravity; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; /** * Created by Jackie on 2017/2/21. * 用于搜索的EditText */ public class SearchEditText extends RelativeLayout { private Context mContext; private LayoutInflater mInflater; private View mView; private LinearLayout mContainer; private EditText mEditText = null; public SearchEditText(Context context) { this(context, null); } public SearchEditText(Context context, AttributeSet attrs) { this(context, attrs, 0); } public SearchEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } private OnSearchChangeListener mSearchChangeListener; public interface OnSearchChangeListener { void searchChange(String s); void removeView(int position); } public void setOnSearchChangeListener(OnSearchChangeListener searchChangeListener) { mSearchChangeListener = searchChangeListener; } private void init(Context context) { mContext = context; mInflater = LayoutInflater.from(mContext); mView = mInflater.inflate(R.layout.search_edittext_layout, null); LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); params.leftMargin = 15; params.rightMargin = 15; addView(mView, params); mContainer = (LinearLayout) mView.findViewById(R.id.layout); mEditText = (EditText) mView.findViewById(R.id.edittext); mEditText.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DEL) { if (isNotFastClick()) { if (mEditText.getText().toString().length() > 0) { String str = mEditText.getText().toString(); str = str.substring(0, str.length() - 1); mEditText.setText(str); mEditText.setSelection(str.length()); } else { if (mContainer.getChildCount() > 0) { if (mSearchChangeListener != null) { mSearchChangeListener.removeView(mContainer.getChildCount() - 1); } mContainer.removeViewAt(mContainer.getChildCount() - 1); } } } } return true; } }); mEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_SEARCH) { if (mEditText.getText().toString().trim().equals("")) { return true; } TextView textView = new TextView(mContext); textView.setText(mEditText.getText().toString().trim()); textView.setTextSize(14); textView.setTextColor(Color.parseColor("#dfe0e0")); textView.setPadding(10, 0, 10, 0); textView.setBackgroundResource(R.drawable.shape_edittext_round_bg); textView.setGravity(Gravity.CENTER); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); params.leftMargin = 10; textView.setLayoutParams(params); if (mSearchChangeListener != null) { mSearchChangeListener.searchChange(mEditText.getText().toString().trim()); } mEditText.setText(""); mContainer.addView(textView); } return true; } }); } public EditText getEditText() { return mEditText; } public LinearLayout getContainer() { return mContainer; } long lastClickTime = 0; public boolean isNotFastClick() { long time = System.currentTimeMillis(); if (time - lastClickTime >= 300) { lastClickTime = time; return true; } else { return false; } } }
search_edittext_layout.xml
<?xml version="1.0" encoding="utf-8"?> <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="none" android:fillViewport="true" > <LinearLayout android:layout_width="match_parent" android:layout_height="33dp" android:orientation="horizontal"> <LinearLayout android:id="@+id/layout" android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="horizontal" android:gravity="center_vertical" android:layout_gravity="center_vertical" /> <EditText android:gravity="center_vertical" android:layout_gravity="center_vertical" android:id="@+id/edittext" android:layout_width="wrap_content" android:layout_height="match_parent" android:background="@null" android:textSize="16dp" android:textColor="#dfe0e0" android:layout_weight="1" android:minWidth="50dp" android:imeOptions="actionSearch" android:singleLine="true" android:layout_marginLeft="10dp"/> </LinearLayout> </HorizontalScrollView>
shape_edittext_round_bg.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#666666" /> <corners android:radius="10dp"/> </shape>
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- Android ListView用EditText實現(xiàn)搜索功能效果
- Android 根據(jù)EditText搜索框ListView動態(tài)顯示數(shù)據(jù)
- Android EditText搜索框實現(xiàn)圖標居中
- Android中搜索圖標和文字居中的EditText實例
- Android控件系列之EditText使用方法
- Android定制自己的EditText輕松改變底線顏色
- Android中EditText顯示明文與密碼的兩種方式
- Android更改EditText下劃線顏色樣式的方法
- Android 設置Edittext獲取焦點并彈出軟鍵盤
- Android利用EditText如何實現(xiàn)搜索框詳解
相關文章
Android?RecyclerBarChart繪制使用教程
這篇文章主要為大家介紹了Android?RecyclerBarChart繪制使用教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12Android性能優(yōu)化之Bitmap圖片優(yōu)化詳解
在Android項目的imageview中使用大圖bitmap時會占據(jù)很大的內存,而且在很多時候我們并不需要顯示原圖那么大的圖片, 所以我們需要對圖片進行優(yōu)化,這篇文章主要介紹了Android性能優(yōu)化之Bitmap圖片優(yōu)化的相關資料,需要的朋友們下面來一起看看吧。2017-04-04Android中Activity常用功能設置小結(包括全屏、橫豎屏等)
這篇文章主要介紹了Android中Activity常用功能設置小結(包括全屏、橫豎屏等),以簡單實例形式分析了Android實現(xiàn)全屏、豎屏及一直顯示等的技巧與注意事項,需要的朋友可以參考下2015-10-10Android手把手教大家制作APP首頁(下拉刷新、自動加載)
這篇文章主要為大家詳細介紹了Android手把手教大家制作APP首頁,實現(xiàn)下拉刷新、自動加載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01Kotlin注解實現(xiàn)Parcelable序列化流程詳解
有時我們會在界面跳轉的過程中,做對象傳值,這時就需要對該對象做序列化處理了。Android中對對象的序列化處理有兩種方式,這篇文章主要介紹了Kotlin注解實現(xiàn)Parcelable序列化2022-12-12Android Rsa數(shù)據(jù)加解密的介紹與使用示例
RSA是第一個既能用于數(shù)據(jù)加密也能用于數(shù)字簽名的算法。它易于理解和操作,也很流行。想起自己曾經使用過的Rsa非對稱加密算法,閑下來總結一下。方便自己和大家以后使用的時候參考借鑒。下面來一起看看吧。2016-09-09