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> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android取消EditText自动获取默认焦点

    最近在通讯录新建联系人=中,一进入一个页面, EditText默认就会自动获取焦点,很是郁闷, 如何让EditText不自动获取焦点? 那么如何取消这个默认行为呢? 在网上找了好久,有点监听软键盘事件,有点调用clearFouse()方法,但是测试了都没有!xml中也找不到相应的属性可以关闭这个默认行为 解决之道:在EditText的父级控件中找一个,设置成 android:focusable="true" android:focusableInTouchMode="true

  • Android EditText限制输入字符类型的方法总结

    Android EditText限制输入字符类型的方法总结 前言: 最近的项目上需要限制EditText输入字符的类型,就把可以实现这个功能的方法整理了一下: 1.第一种方式是通过EditText的inputType来实现,可以通过xml或者Java文件来设置.假如我要设置为显示密码的形式,可以像下面这样设置: 在xml中 Android:inputType="textPassword" 在java文件中,可以用 myEditText.setInputType(InputType.TY

  • Android点击EditText文本框之外任何地方隐藏键盘的解决办法

    1,实现方法一: 通过给当前界面布局文件的父layout设置点击事件(相当于给整个Activity设置点击事件),在事件里进行键盘隐藏 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/traceroute_rootview" android:layout_width="fill_parent" android:

  • Android更改EditText下划线颜色样式的方法

    前言 相信大家都知道,当使用AppCompatEditText(Edit Text)时,默认的下划线是跟随系统的#FF4081的颜色值的,通过改变这个值可以改变所有的颜色样式 有时候你想单独定义某一个界面的颜色样式,则可以这样做: 1.在你的build.gradle中添加最新的appcompat库 dependencies { compile 'com.android.support:appcompat-v7:X.X.X' // X.X.X 为最新的版本号 } 2.让你的activity继承an

  • Android的EditText字数检测和限制解决办法

    Android的EditText字数检测和限制解决办法 控件EditText在Android布局中经常用到,对EditText中输入的内容也经常需要进行限制,我们可以通过TextWatcher去观察输入框中输入的内容. public class TextWatcherDemo extends Activity { private TextView mTextView; private EditText mEditText; /** Called when the activity is firs

  • Android中实现EditText密码显示隐藏的方法

    在Google发布了support:design:23+以后我们发现有这么一个东西TextInputLayout,先看下效果图: <android.support.design.widget.TextInputLayout android:id="@+id/pwdLayout" android:layout_width="match_parent" android:layout_height="wrap_content" app:passw

  • Android 开发实现EditText 光标居右显示

     Android 开发实现EditText 光标居右显示 前言: 有些时候肯定会遇到这种奇葩的需求,光标要靠右显示,因为Android里面光标默认是靠左显示的,那怎么实现呢,肯定有办法的,这里提供一种实现方式,看布局 <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+i

  • android如何改变editText控件中部分文字的格式

    我们在使用editText控件的时候,会遇到这样的一问题,就是我在输入时候,当我选择让文字变粗时,我输入的文字就会变粗,当我去掉选择时,再输入文字时,文字就是正常情况了. 这种情况,大家一般认为很简单啊.editText中不是有setTypeface这个方法吗.只要使用edit_temp.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));就可以了.可是问题来了.这种方法,是将editText中所有的文字的格式全变了.可是我想要的格式是

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

    今天在项目中用到了用到了一种特殊的EditText,当用户在EditText中输入内容,点击搜索按钮的时候,输入的内容能够高亮,然后添加到输入的容器中.删除的时候,能够将容器中的关键词逐一删除.附上代码: SearchEditText.java package com.jackie.searchresultedittext; import android.content.Context; import android.graphics.Color; import android.util.Att

  • 仿百度的关键词匹配搜索示例

    复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>关键词匹配搜索仿百度</title> <meta name="description" content=" 内容介绍不超过10

  • Android EditText输入框实现下拉且保存最近5个历史记录思路详解

    文章结构: 后面又添加了清空历史记录的标签,就是在每一次添加更新后台数组后,数组的下一个标签为清空历史记录. s_btnDown.setOnClickListener(this); //对其进行焦点监听 case R.id.btnDown: showListPopulWindow(); //调用显示PopuWindow 函数 break; 点击后触发PopuWindow函数,也就是将其下拉框,绑定到TextBox标签的下面. private void showListPopulWindow()

  • Android EditText追加空格、限制字符等方法示例

    前言 使用输入框时产品常常会有一些需求,比如123456789变成123-456-789或者限制一些字符的输入等等.很多时候都是网上搜索就完事了,但是每次都去搜索有点浪费时间,而且有些也不符合需求.所以自己写一篇,以后就可以吃老本了.

  • Android EditText随输入法一起移动并悬浮在输入法之上的示例代码

    好习惯,先上图 今天在做作业的时候有这样一种需求,评论功能页面需要仿QQ或者微博类似的页面布局,Edittext固定底部,但是又能悬浮在输入法之上.百度看了好多代码,又是写监听改变布局,又是动态调整输入框的位置,很高级,但是我尝试都没有效果,也不知道是我手机的原因还是不会用人家的代码,没办法,自己动手研究. 研究结果: 一共三个点 1.文件AndroidManifest.xml里 当前页面的activity标签里加这个 android:windowSoftInputMode="adjustRes

  • 微信小程序实现搜索关键词高亮的示例代码

    1,前言 项目中碰到一个需求,搜索数据并且关键词要高亮显示,接到需求,马上开干.先上效果图.源码已经做成了小程序代码片段,放入了GitHub了,文章底部有源码链接. 2,思路 博主第一时间想到的就是使用split,根据搜索的关键词,处理后台返回的数据,然后indexOf找到关键字,给每个字添加deep字段,deep为true,则高亮,为false,则正常.由于是小程序,所以楼主直接做成了一个高亮组件,代码很简单,实现步骤如下. 3,代码逻辑 模拟数据如下 list:[ '武汉大学', '华中科技

  • Android EditText限制输入字符的方法总结

     Android EditText限制输入字符的方法总结 最近项目要求限制密码输入的字符类型, 例如不能输入中文.   现在总结一下EditText的各种实现方式,  以比较各种方法的优劣.  第一种方式:  设置EditText的inputType属性,可以通过xml或者Java文件来设置.假如我要设置为显示密码的形式,可以像下面这样设置: 在xml中,   Android:inputType="textPassword" 在java文件中,可以用 ev.setInputType(I

  • Android实现强制下线功能的示例代码

    一.回顾 上次连载写了两个类,一个类ActivityCollector.java用于管理所有的活动:一个类是BaseActivity.java作为所有活动的父类: 还有一个放在layout目录中的登录界面login.xml 二.登录页面的活动 接下来写一个登录页面的活动,继承自BaseActivity.java package com.example.broadcastbestpractice; import android.content.Intent; import android.os.B

  • Android输入框实时模糊搜索效果的示例代码

    Android输入框实时模糊搜索 很多开发场景会用到搜索框实时模糊搜索来帮助用户输入内容,如图 思路是在EditText 字符变动的时候 弹出ListPopupwindow并更新列表,这样的做法google已经封装为AutoCompleteTextView 用法 mAutoCompleteTextView.setAdapter(adapter); mAutoCompleteTextView.setFocusable(true); mAutoCompleteTextView.setOnItemCl

  • Android View滑动的实现分析示例

    目录 1.layout方法 2.offsetLeftAndRight()与offsetTopAndBottom() 3.LayoutParams(改变布局参数) 4.scrollTo与scrollBy 5.Scroller 实现View滑动有很多种方法,这篇帖子介绍6中滑动的方法,分别是: layout().offsetLeftAndRight().offsetTopAndBottom().LayoutParams.scrollTo.scrollBy.Scroller. 1.layout方法 绘

随机推荐