AutoCompleteTextView全局匹配

       AutoCompleteTextView 这个东西做Android的应该都看过~没看过的去百度下吧,我就不多说了,问题是它怎么能自动补全的呢?

      这个是因为它setAdapter(adapter);,没错,你没看错,就是因为它设置了一个adapter。。。而它的过滤原则也是根据这个adapter中的Filter来的。

      一般网上的那些例子里面都是设置的一个ArrayAdapter,这个adapter里面的Filter看源码就能看出来是怎么过滤的:

 public Filter getFilter() {
        if (mFilter == null) {
            mFilter = new ArrayFilter();
        }
        return mFilter;
    }

    /**
     * <p>An array filter constrains the content of the array adapter with
     * a prefix. Each item that does not start with the supplied prefix
     * is removed from the list.</p>
     */
    private class ArrayFilter extends Filter {
        @Override
        protected FilterResults performFiltering(CharSequence prefix) {
            FilterResults results = new FilterResults();

            if (mOriginalValues == null) {
                synchronized (mLock) {
                    mOriginalValues = new ArrayList<T>(mObjects);
                }
            }

            if (prefix == null || prefix.length() == 0) {
                ArrayList<T> list;
                synchronized (mLock) {
                    list = new ArrayList<T>(mOriginalValues);
                }
                results.values = list;
                results.count = list.size();
            } else {
                String prefixString = prefix.toString().toLowerCase();

                ArrayList<T> values;
                synchronized (mLock) {
                    values = new ArrayList<T>(mOriginalValues);
                }

                final int count = values.size();
                final ArrayList<T> newValues = new ArrayList<T>();

                for (int i = 0; i < count; i++) {
                    final T value = values.get(i);
                    final String valueText = value.toString().toLowerCase();

                    // First match against the whole, non-splitted value
                    if (valueText.startsWith(prefixString)) {//看到没有~这就是匹配原则。。。就是这么蛋疼,就是这么酸爽
                        newValues.add(value);
                    } else {
                        final String[] words = valueText.split(" ");
                        final int wordCount = words.length;

                        // Start at index 0, in case valueText starts with space(s)
                        for (int k = 0; k < wordCount; k++) {
                            if (words[k].startsWith(prefixString)) {
                                newValues.add(value);
                                break;
                            }
                        }
                    }
                }

                results.values = newValues;
                results.count = newValues.size();
            }

            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            //noinspection unchecked
            mObjects = (List<T>) results.values;
            if (results.count > 0) {
                notifyDataSetChanged();
            } else {
                notifyDataSetInvalidated();
            }
        }
    }

 所以,我的做法就是,直接复制整个ArrayAdapter类,然后将里面的那句原则改掉,改成  valueText.contains(prefixString)  ,这样在设置的时候设自定义的这个类,然后,然后就能看到全局匹配的AutoCompleteTextView了。

AutoCompleteTextView控件自定义下拉框背景,点击效果,字体显示效果,匹配条件等效果 系统的AutoCompleteTextView是一个很好用的控件,但是不得不承认它的样式不怎么好看,这次正好用到了这个控件,将用到的一些效果记录一下。 先看一下项目结构: 1.src下两个类,一个是主窗体类,用来显示界面的,一个是AutoCompleteTextView用的适配器类,这个适配器类是直接用的ArrayAdapter的源码,修改成自己需要的样子。 2.drawable文件 阅读详情

相关推荐

Android AutoCompleteTextView 实战指南:从原理到中文拼音匹配

AutoCompleteTextView 是 Android 原生提供的智能输入补全控件,基于 EditText 扩展,内置 ListPopupWindow 与 Filter 机制,实现输入-过滤-展示-选择的闭环交互。其核心原理是通过 Adapter 提供数据源,由 Filter 在后台线程执行轻量级文本匹配(如 contains、startsWith),再安全发布结果至 UI 线程。技术价值在于零依赖、全 API 兼容(API 14+)、低内存占用与高可访问性,特别适合政务、医疗、物流等强稳定性要求场景

diaoju3333的博客 386

ArrayAdapter源码

看看人家怎么写的。 [code="java"] /* * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in comp...

gundumw100的专栏 261

掌握Android AutoCompleteTextView的自动匹配功能

本文还有配套的精品资源,点击获取 简介:AutoCompleteTextView是Android开发中的一个视图组件,用于提供用户输入时的自动补全功能。通过实现AutoCompleteTextView,可以优化用户体验,特别是在需要从大量选项中选择时。本文将介绍如何通过添加依赖、设置数据源、适配器、触发条件和监听事件,实现AutoCompleteTextView的基本用法。...

weixin_34471637的博客 2106

Android 之 自动匹配字符AutoCompleteTextView

AutoCompleteTextView是自动匹配字符,当我们输入一个单词或一段话的前几个字时,就会自动为你匹配后面的内容看效果图: 接下来上代码: MainAvtivity AutoCompleteTextView是自动匹配字符,当我们输入一个单词或一段话的前几个字时,就会自动为你匹配后面的内容看效果图: 代码: MainActivity package com.exam

木叶萧萧下的博客 450

AutoCompleteTextView自动匹配字符

AutoCompleteTextView是自动匹配字符

MavLink协议入门

MAVLink是一个非常轻量化的开源的消息协议,用于无人机之间的通信以及无人机机载设备之间的通信。

ffffffeiyu的博客 2475

自定义AutoCompleteTextView

android自带的AutoCompleteTextView只能

cbbing的专栏 774

APM无人船测绘实战:从RTK、测深仪到图传的完整系统集成指南

本文提供了一套完整的APM无人船测绘系统集成实战指南。从RTK模块配置、测深仪数据同步到图传系统接入,详细解析了硬件选型、接线、软件参数调试及QGC地面站任务规划的全流程,旨在帮助用户将分散的部件整合为可自主执行水下地形测绘的可靠工具。

rr23456的博客 521

简单的实现AutoCompleteTextView自动匹配数据

备注:此备注将会存在本人的每一条博客,将会定期更改 1、使用的软件是Android studio 版本是3.4.2 一、很简单的实现,使用ArrayAdapter适配器,只能在自己添加的字符串里实现匹配数据 首先还是最简单的添加控件 <?xml version="1.0" encoding="utf-8"?> <AutoCompleteTextView android:...

季小心的博客 1418

从硬件拆解到图像生成:一次搞懂MRI设备(主磁体、梯度线圈、射频系统)是如何协同工作的

本文深入解析MRI设备的三大核心系统——主磁体、梯度线圈和射频系统如何协同工作,实现从量子现象到诊断图像的转化。通过详细的技术参数和临床案例,揭示磁共振成像(MRI)在医疗图像处理中的精密工程原理和最新技术突破,帮助读者全面理解这一现代医学影像技术的运作机制。

weixin_33734785的博客 550

[DA45] 使用PageRank算法分析希拉里邮件中的人物关系

一. 相关知识 (一) PageRank算法 PageRank 算法是 google 公司的创始人拉里·佩奇和谢尔·盖布林于1998年提出的网页搜索优化算法. 详细内容请见百度百科:google pagerank. 如果你了解了该算法, 就能明白上一段的超链接从本页面链出, 链入百度百科的 PageRank 算法页面增加了该页面...

Vincent_Chu的博客 2377

AutoCompleteTextView→一次匹配MultiAutoCompleteTextView→多次匹配

百度搜索框自动提示搜索词的应用 AutoCompleteTextView→一次匹配 java.lang.Object   android.view.View     android.widget.TextView       android.widget.EditText   android.widget.AutoCompleteTextView MultiAutoCompleteT

优快云YUANDAIMAXUEXI的博客 1566

UniApp实战:从文件下载到本地保存与预览的一站式解决方案

本文深入解析了UniApp开发中文件下载、保存与预览的完整流程,提供了基于uni.downloadFile、uni.saveFile和uni.openDocument API的一站式实战解决方案。文章详细拆解了核心API的使用方法、多平台(App、H5)的兼容性处理、常见坑点(如文件路径、权限、格式支持)以及进阶优化技巧(如进度提示、文件管理),旨在帮助开发者构建健壮、用户体验良好的跨平台文件处理功能。

d3e4f的博客 614

自定义autoCompleteTextView实现自己的匹配规则

自定义autoCompleteTextView实现自己的匹配规则 前言 用过autoCompleteTextView(后面简称auto)的同学都知道,它默认是从字符串的头部开始匹配的。或者中间有空格的也能从空格开始匹配后面的字符串。乍一看还以为是auto的匹配规则问题,其实是Adapter的问题(本来使用的是ArrayAdapter),要怎么样自定义匹配规则呢?! 1.自定义adapter继承自baseAdapter 2.实现Filterable接口,发现里面有一个必须实现的方法getFilter(

每天不是在写bug就是在写bug的路上 469

408王道计算机组成原理强化——指令系统及大题解构

1.大纲要求 2.x86

JiangNan_1002的博客 8512

用FPGA控制步进电机是种什么体验?从状态机到分频器,详解Verilog驱动A4988全流程

本文详细介绍了如何使用FPGA通过Verilog语言控制步进电机,从状态机设计到A4988驱动模块的精准控制全流程。FPGA的并行处理能力和纳秒级响应速度使其在步进电机控制中展现出显著优势,特别适合工业自动化和精密仪器应用。通过实战代码示例,展示了如何实现高效的状态机设计和可编程分频器,为开发者提供了一套完整的FPGA驱动步进电机解决方案。

weixin_30983965的博客 329

使用AutoCompleteTextView实现自动匹配输入的内容

比如在百度搜索内容时,当我们在搜索框内输入部分内容时,下面就会出现很多相关内容的提示供我们选择。要在手机的一个输入框中也实现这样的功能。该怎么做呢? 目标:使用AutoCompleteTextView实现自动匹配输入的内容 步骤:①在布局文件中编写一个AutoCompleteTextView②编写功能实现的代码逻辑部分 一、新建一个工程,代码结构如下图所示: 二、编

programmerteny的博客 1065

Test软件:Keysight二次开发_(1).Keysight软件开发概述

VISA(Virtual Instrument Software Architecture)库是Keysight提供的一种标准化的仪器控制接口,支持多种编程语言和开发环境。仪器通信:通过GPIB、USB、以太网等接口与仪器进行通信。数据采集:从仪器中获取测量数据。命令发送:向仪器发送控制命令。错误处理:处理通信过程中可能出现的错误。测试自动化是指通过编写脚本或程序来自动执行测试任务,从而提高测试效率和减少人为错误。Keysight的测试设备和仪器支持多种编程语言和开发环境,使得测试自动化变得相对容易。

2401_87715305的博客 1359

Android之AutoCompleteTextView自动匹配RecycleView

Android之AutoCompleteTextView自动匹配RecycleViewXML布局文件中:&lt;AutoCompleteTextView android:id="@+id/search_bar" android:layout_width="match_parent" android:layout_height="@dimen/searchbar_height...

starzhangkiss的博客 1121

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Android】自动提示匹配之AutoCompleteTextView

public class AutoCompleteTextView extends EditText implements Filter.FilterListener java.lang.Object    ↳ android.view.View      ↳ android.widget.TextView

迁移到http://hukai.me 3196

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android - AutoCompleteTextView (输入框动态匹配内容)

Android : AutoCompleteTextView的使用 比如在百度搜索的时候你输入的关键字,就会动态的比配某些相关的内容,而这项技术被称为:AutoCompleteTextView AutoCompleteTextView特定的属性值 : android:CompletionThreshold = "2"设置多少个字符,自动匹配 1 . 初始化控件 2. 创建适配器

wuya_meiya的博客 1241

使用AutoCompleteTextView和MultiAutoCompleteTextView实现输入自动匹配

AutoCompleteTextView的布局属性和一般的TextView 并没有很大的区别,仅仅是增加了一条属性: <AutoCompleteTextView android:id="@+id/autoCompleteTextView1" android:layout_width="match_parent" android:layout_he

jyDave的博客 585

[已解决]AutoCompleteTextView 不显示匹配的内容,因为将空的内容添加进去了

09-20 17:11:08.586 28516-996/com.wbm.app.activity W/Filter: An exception occured during performFiltering( java.lang.NullPointerException at android.widget.ArrayAdapter$ArrayFilter.performFilt

Kodulf的专栏 3900

Android-使用AutoCompleteTextView进行动态匹配

Android-使用AutoCompleteTextView进行动态匹配在百度上面进行关键词搜索的时候,当我们输入时,就会显示一个下拉框, 匹配到我们输入的关键词,其实在安卓上面也有这个组件。 AutoCompleteTextView会实现自动匹配,如果不是复习以前的基础,还真不知道这个东西,嘿嘿,半桶水就是半桶水,还是得多多练习,查漏补缺啊。小例子:<LinearLayout xmlns:an

Kid_TH的博客 1万+

Android AutoCompleteTextView和MultiAutocompleteTextView实现动态自动匹配输入的内容

AutoCompleteTextView MultiAutocompleteTextView 这两个控件长的很相似,功能也很相似。 AutoCompleteTextView 功能: 动态匹配输入的内容,如百度搜索引擎当输入文本时 可以根据内容显示匹配的热门信息。 独特属性 android:completionThreshold="2" //收入两个字符后自动...

weixin_33806300的博客 292

android 自动匹配文本 AutoCompleteTextView /MultiAutoCompleteTextView

<!--AutoComplete 的 XML示例 android:completionThreshold="3" //输入数达到3时开始显示提示 --> <AutoCompleteTextView android:completionThreshold="3" android:id="@+id/autoCom

sidiansh的专栏 548
上一篇: Android 中有意思的方法
下一篇: 比较狠的开源库。
biandroid
博客等级 码龄15年 3粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值