全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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> 

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


# android  # edittext搜索  # edittext  # 搜索  # 搜索按钮  # Android ListView用EditText实现搜索功能效果  # Android 根据EditText搜索框ListView动态显示数据  # Android EditText搜索框实现图标居中  # Android中搜索图标和文字居中的EditText实例  # Android控件系列之EditText使用方法  # Android定制自己的EditText轻松改变底线颜色  # Android中EditText显示明文与密码的两种方式  # Android更改EditText下划线颜色样式的方法  # Android 设置Edittext获取焦点并弹出软键盘  # Android利用EditText如何实现搜索框详解  # 关键词  # 大家多多  # 一种特殊  # String  # removeView  # searchChange  # interface  # void  # inflate  # layout  # searchChangeListener  # position  # setOnSearchChangeListener  # mSearchChangeListener  # context  # attrs  # null  # mContainer  # mEditText  # init 


相关文章: 如何快速生成专业多端适配建站电话?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  seo网站制作优化,网站SEO优化步骤有哪些?  如何在云指建站中生成FTP站点?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  如何在香港服务器上快速搭建免备案网站?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  如何打造高效商业网站?建站目的决定转化率  如何快速搭建二级域名独立网站?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  如何通过.red域名打造高辨识度品牌网站?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  如何高效生成建站之星成品网站源码?  如何通过虚拟主机空间快速建站?  如何通过PHP快速构建高效问答网站功能?  C++如何使用std::optional?(处理可选值)  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  C#如何序列化对象为XML XmlSerializer用法  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  h5在线制作网站电脑版下载,h5网页制作软件?  jQuery 常见小例汇总  建站之星安全性能如何?防护体系能否抵御黑客入侵?  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  网站制作企业,网站的banner和导航栏是指什么?  如何正确下载安装西数主机建站助手?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  在线制作视频的网站有哪些,电脑如何制作视频短片?  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  魔毅自助建站系统:模板定制与SEO优化一键生成指南  如何高效配置香港服务器实现快速建站?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  建站之星后台管理系统如何操作?  建站之星IIS配置教程:代码生成技巧与站点搭建指南  佛山企业网站制作公司有哪些,沟通100网上服务官网?  深入理解Android中的xmlns:tools属性  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  建站VPS选购需注意哪些关键参数?  建站10G流量真的够用吗?如何应对访问高峰? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。