今天在项目中用到了用到了一种特殊的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小时内与您取得联系。