文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2022-06-06 11:47

关注

今天在项目中用到了用到了一种特殊的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; 
 
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 ListView用EditText实现搜索功能效果Android 根据EditText搜索框ListView动态显示数据Android EditText搜索框实现图标居中Android中搜索图标和文字居中的EditText实例Android控件系列之EditText使用方法Android定制自己的EditText轻松改变底线颜色Android中EditText显示明文与密码的两种方式Android更改EditText下划线颜色样式的方法Android 设置Edittext获取焦点并弹出软键盘Android利用EditText如何实现搜索框详解


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯