软件编程
位置:首页>> 软件编程>> Android编程>> Android EditText实现关键词批量搜索示例

Android EditText实现关键词批量搜索示例

作者:shineflowers  发布时间:2022-12-09 06:20:21 

标签:android,edittext

今天在项目中用到了用到了一种特殊的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>

来源:http://blog.csdn.net/shineflowers/article/details/58058010?locationNum=8&fps=1

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com