android批量搜索xml文件,Android EditText实现关键词批量搜索示例

本文介绍了一个自定义的SearchEditText组件,该组件在用户输入内容后,点击搜索按钮,输入内容会高亮显示并添加到容器中。当按下删除键时,能从容器中移除关键词。提供了接口供外部监听搜索变化和删除操作。代码示例详细展示了其实现过程。
摘要由CSDN通过智能技术生成

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

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"

>

android:layout_width="match_parent"

android:layout_height="33dp"

android:orientation="horizontal">

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" />

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"/>

shape_edittext_round_bg.xml

android:shape="rectangle">

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值