Android 输入框的输入提示效果(AutoCompleteTextView)

2023-11-05

在一些体验较好的APP中,输入框输入时会有相应的提示,让人能够很快的通过点击提示进入下一步

 

这里,我就通过自己构思,实现了一个通过 SharedPreferences 保存的输入提示 demo

 

 

实现:

1、实现一个 SharedPreferences 以及其 get、set方法

2、布局一个  AutoCompleteTextView

3、通过java代码实现适配布局、输入提示的保存

4、实际运用

 

效果:

 

AutoCompleteTextView 定义的输入框和普通的 EditText 差不多

但是可以通过其他设置让它有输入提示功能

 

实现详情:

 

1、实现一个 SharedPreferences 以及其 get、set方法

SharedPreferences 是一个轻量级的储存类,这里我拿它来做实验,我设置最多可以保存三个提示

 

import android.content.Context;
import android.content.SharedPreferences;

/**
 * Created by Administrator on 2018/3/23 0023.
 * 定义 SharedPreferences 以及相应的 get、set 方法
 */

public class MySharedPreferences {
    //创建一个SharedPreferences    类似于创建一个数据库,库名为 data
    public static SharedPreferences share(Context context){
        SharedPreferences sharedPreferences = context.getSharedPreferences("date", 
                Context.MODE_PRIVATE);
        return sharedPreferences;
    }

    //账号1
    public static String getPhone1(Context context){
        return share(context).getString("phone1",null);
    }
    //这里使用的是 apply() 方法保存,将不会有返回值
    public static void setPhone1(String phone1, Context context){
        SharedPreferences.Editor e = share(context).edit();
        e.putString("phone1",phone1);
        e.apply();
    }

    //账号2
    public static String getPhone2(Context context){
        return share(context).getString("phone2",null);
    }
    //这里使用的是 apply() 方法保存,将不会有返回值
    public static void setPhone2(String phone2, Context context){
        SharedPreferences.Editor e = share(context).edit();
        e.putString("phone2",phone2);
        e.apply();
    }

    //账号3
    public static String getPhone3(Context context){
        return share(context).getString("phone3",null);
    }
    //这里使用的是 apply() 方法保存,将不会有返回值
    public static void setPhone3(String phone3, Context context){
        SharedPreferences.Editor e = share(context).edit();
        e.putString("phone3",phone3);
        e.apply();
    }
}

SharedPreferences 可以灵活运用,还可以保存一些其他的常用配置信息、状态信息等

 

 

 

2、布局一个  AutoCompleteTextView

 

<AutoCompleteTextView
    android:id="@+id/phone"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="账号(一般是手机号)"/>

<EditText
    android:id="@+id/pswd"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:hint="密码"/>

<Button
    android:id="@+id/sign_in"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="登录"/>

布局很简单,看上面的效果图就知道了,只不过第一个输入框是 AutoCompleteTextView

第二个是普通的 EditView 加了密码效果

 

3、通过java代码实现适配布局、输入提示的保存

这里是重点,主要是为 AutoCompleteTextView 加入提示数据还有更新登入提示数据

 

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

    private AutoCompleteTextView phone;
    private EditText pswd;
    private Button sign_in;
    private String[] array;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        phone = (AutoCompleteTextView) findViewById(R.id.phone);

        array = new String[3];
        array[0] = MySharedPreferences.getPhone1(this)+"";
        array[1] = MySharedPreferences.getPhone2(this)+"";
        array[2] = MySharedPreferences.getPhone3(this)+"";

        //创建 AutoCompleteTextView 适配器 (输入提示)
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                this,
                android.R.layout.simple_dropdown_item_1line,
                array);
        //初始化autoCompleteTextView
        phone.setAdapter(adapter);
        //设置输入多少字符后提示,默认值为2,在此设为1
        phone.setThreshold(1);

        pswd = (EditText) findViewById(R.id.pswd);
        sign_in = (Button) findViewById(R.id.sign_in);


        sign_in.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //登录判断。。。

                //这里假设登入成功了 if 里面的是判断是否登入成功(这里随便写的)
                if((phone.getText().length()+pswd.getText().length()) >= 10){
                    //判断登录的账号有没有保存
                    phones(MainActivity.this, array, phone.getText().toString());
                }
                startActivity(new Intent(MainActivity.this, Main2Activity.class));
            }
        });

    }
    //判断登录的账号有没有保存,没有就保存起来,替换一个最久没登录的
    public static void phones(Context context, String[]array, String phone){
        //当 phone 是新登录的账号的时候
        boolean trfa = (!phone.equals(array[0]) && !phone.equals(array[1]) && !phone.equals(array[2]));
        if(trfa){
            //循环一下,将最后一个替换成新的
            MySharedPreferences.setPhone3(array[1], context);
            MySharedPreferences.setPhone2(array[0], context);
            MySharedPreferences.setPhone1(phone, context);
        }
    }
}

具体都有注释,可以仔细看看

 

4、实际运用

这里我模仿登录成功,就跳转到了另一个Activity去了,如果要查看效果,就又跳转回来实践

 

这里弹出来的提示数据都是在 SharedPreferences 里的,它只能存少量数据

如果有需要可以将数据存入 SQLite 中去

 

 

源码:https://github.com/iscopy/AutoCompleteTextView

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 输入框的输入提示效果(AutoCompleteTextView) 的相关文章

  • Android - 保存动态更改布局的状态

    我有一个布局 用户可以在其中添加按钮并将其放置在他们想要的位置 我想允许用户保存他们的布局 以便下次打开应用程序时加载它 有谁知道我是否可以将文件保存到 SD 卡上 或者 我可以使用某种layout getXml 方法并将其放入我的应用程序
  • Firebase 管理 SDK Android

    在 Android 中初始化 Firebase Admin SDK 的代码 Override protected void onCreate Bundle savedInstanceState super onCreate savedIns
  • 在应用程序简历中隐藏软键盘

    我有一个 Android 应用程序 使用 Xamarin 用 C 编写 我已将应用程序简化为包含 TextView 和用于横幅广告的 Google admod AdView 的 LinearLayout 我不希望软键盘出现在应用程序中 这不
  • getItem 与 getItemAtPosition

    有两种方法可以获取列表视图中的选定项目 list getAdapter getItem position list getItemAtPosition position 我的问题是 哪一种是首选的做法 我见过人们同时使用这两种方法 您可以使
  • 从 Throwable 获取错误代码 - Android

    我怎样才能从错误代码可投掷 https developer android com reference java lang Throwable html public void onFailure Throwable exception 我
  • Android第一次动画不流畅

    我正在尝试一个动画将 imageView 从屏幕底部滑动到屏幕中心 但是当我第一次执行此动画时 它不平滑 但当第二次执行动画时 它是正常且平滑的 我几乎尝试了所有方法 但无法解决我的问题 这是我的动画文件
  • 与 Admob 广告单元 ID 混淆

    我跟着tutorial https developers google com admob android quick start在我的应用程序中创建广告横幅 到目前为止 这有效 我可以看到测试广告 但是 本教程指示我在两个不同的位置使用两
  • 如何从 SQLite 获取记录总数

    我正在尝试从 Sqlite DB 获取行的总数 以下是我想要做的代码片段 我不知道我在这里做错了什么 public static int getTotalCount Context context Cursor c null try c g
  • 共同的偏好不断消失

    我正在使用共享首选项来存储我的应用程序的登录凭据 除了一个用户之外 一切正常 一段时间后 共享偏好似乎会以某种方式重置或清除 我已针对该用户调整了我的应用程序 使其不再清除他的共享偏好设置 这样我就可以确定这不是我的应用程序的错 但即使在这
  • KitKat(及更低版本)设备上的 Android Material Design

    我将在我们学校开发一个 Android 应用程序作为一个项目 我想使用 Google 的新 Material Design 但我知道它仅适用于 Android L 设备 Jack Underwood 最近发布了名为 Today Calend
  • 在 Android 中使用 DataOutputStream 在 POST 正文中发送特殊字符 (ë ä ï)

    我目前正在开发一个具有大量服务器端通信的 Android 应用程序 昨天 我收到一份错误报告 称用户无法发送 简单 特殊字符 例如 我搜索过但没有找到任何有用的东西 可能重复 没有答案 https stackoverflow com que
  • 在 Jetpack Compose 中启动动画矢量 Drawable

    我有一个动画矢量可绘制R drawable my anim 我想在 Jetpack Compose 中展示并开始 可绘制对象显示 渲染正确 但动画未启动 这是撰写视图 Composable fun SplashView Surface mo
  • 带有自定义阵列适配器的微调器不允许选择项目

    我使用自定义阵列适配器作为微调器 但是 当在下拉列表中选择一个项目时 下拉列表保留在那里 并且微调器不会更新 这是错误行为 与使用带有字符串的通用数组适配器相比 这是自定义类 我错过了什么吗 谢谢 public class Calendar
  • ROOM迁移过程中如何处理索引信息

    CODE Entity tableName UserRepo indices Index value id unique true public class GitHubRepo PrimaryKey autoGenerate true p
  • MediaCodec 创建输入表面

    我想使用 MediaCodec 将 Surface 编码为 H 264 使用 API 18 有一种方法可以通过调用 createInputSurface 然后在该表面上绘图来对表面中的内容进行编码 我在 createInputSurface
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • Android Studio:无法启动守护进程

    当我尝试在 Android Studio 中导入 gradle 项目时 遇到以下错误 Unable to start the daemon process This problem might be caused by incorrect
  • 如何创建像谷歌位置历史记录一样的Android时间轴视图?

    我想设计像谷歌位置历史这样的用户界面 我必须为我正在使用的应用程序复制此 UIRecyclerView 每行都是水平的LinearLayout其中包含右侧的图标 线条和视图 该线是一个FrameLayout具有圆形背景和半透明圆圈Views
  • SharedFlow 和 StateFlow 的主要区别

    两者有什么区别共享流 and 状态流 以及如何使用这些MVI建筑学 使用简单更好吗Flow或者这些作为状态和事件 Flow 是冷的 意味着它仅在收集数据时才发出数据 另外Flow不能保存数据 可以把它看成是水在里面流动的管道 Flow中的数
  • 用于推送通知的设备令牌

    我正在实施推送通知服务 我需要创建一个数据库来存储 4 个移动平台的所有设备令牌 我想根据他们的平台 iOS Android BlackBerry WP7 来组织它们 但是有什么方法可以区分平台 这样如果我只想向 Android 用户发送消

随机推荐

  • 机器学习 day18(用Tensorflow搭建一个神经网络)

    1 之前搭建神经网络的方法 先初始化输入数据X 创建layer 1并计算激活值a1 创建layer 2并计算激活值a2 这是前向传播代码的显式形式 2 另一种简单些的创建神经网络的方法 创建layer 1和layer 2与前一种方法相同 但
  • 17_分布式文档系统_document的全量替换、强制创建以及lazy delete机制

    课程大纲 1 document的全量替换 2 document的强制创建 3 document的删除 1 document的全量替换 1 语法与创建文档是一样的 如果document id不存在 那么就是创建 如果document id已经
  • Swagger

    第一节 Swagger 简介 1 企业开发所面临的问题 在前后端分离开发的情况下 前端开发人员经常抱怨后端开发人员给的接口文档与实际情况不一致 后端开发人员觉得编写接口文档太过于消耗精力 而且更新也不及时 以至于前后端开发人员经常出现争吵的
  • 【kickstart 2021 round C】前三题python题解

    第一题 题目 给定长度为N的字符串S 它是由字母表上的前K个字母构成 问字典序小于S且长度为N的回文字符串 由字母表上的前K个字母构成 有多少个 解释 参考官方题解 计算多少个长度为N 2的字符串的字典序小于S math ceil N 2
  • 动态动态规划(DDP)

    1 Problem E Codeforces 一 题目大意 给你一个无向图 第i和i 1条边的权值是w i 问你每个点不在自己原本的点的代价是多少 会有q组询问 表示修改第i条边的权值 二 解题思路 可以观察到 完成这个操作需要每条边经过两
  • [LeetCode]初级算法-字符串- 实现strStr()

    标题 实现strStr 实现 strStr 函数 给定一个 haystack 字符串和一个 needle 字符串 在 haystack 字符串中找出 needle 字符串出现的第一个位置 从0开始 如果不存在 则返回 1 示例 1 输入 h
  • linux防火墙启动、停止、查看

    停止 防火墙 service iptables stop 启动防火墙 service iptables start 查看防火墙配置 iptables L n 修改的内容只是暂时保存在内存中 如果重启后还要生效 则要保存一下 service
  • Web Storage是什么?Web Storage详解

    Web Storag是HTML5引入的一个非常重要的功能 可以将数据存储在本地 如保存用户的偏好设置 复选框的选中状态 文本框默认填写的值等 用户在浏览器中刷新网页时 网页通过Web Storage就可以知道用户之前所做的一些修改 而不需要
  • Autoware 1.14(WSL2) 与LG SVL Simulator(Win11)联合仿真

    参考Couldn t find executable named rqt lgsvl simulator configurator below home autoware Autoware ros in li4692625的博客 CSDN博
  • Hyperledger Fabric核心配置文件(1)

    1 core yaml core yaml配置文件是Peer节点的示例配置文件 具体路径在fabric samples config目 录下 该core yaml示例配置文件共指定了如下六大部分内容 1 日志部分 日志记录级别有6种 CRI
  • JDBC访问数据库

    一 简介 JDBC 全称 Java DataBase Connection 数据库连接技术 可以根据驱动包连接不同类型的数据库 二 JDBC API JDBC API是java中位于java sql包下的一个数据库访问统一接口 通过它来跟数
  • 无监督学习KMeans学习笔记和实例

    KMeans算法是一种简单的算法 能够快速 高效的对数据集进行聚类 一般只要通过几次迭代即可 KMeans可以作为一种聚类工具 同时也可以作为一种降维的方式进行特征降维 KMeans可以通sklearn cluster kmeans中进行调
  • 测试 开发 5 年从外包 18K 跳槽去字节 28K+12,啃完这份笔记你也可以

    软件测试是一个付出就有回报的工作 可能很多人会说软件测试就是吃青春饭 然而其他工作又何尝不是 没有哪一家公司养尸位素餐之人 大龄员工有被辞退的 也有没被辞退的 干任何职业 抱着一劳永逸的心态 在岗位上开始混的中青年 早就该辞了 粉丝小王转行
  • 测试方法——边界值法

    边界值测试方法 边界值方法是一种比较常用的测试方法 在很多软件测试中都会应用到 一 应用条件 只要有输入框输入数据的地方 就可以用边界值这一方法来测试 一般与等价类划分共同使用 找到有效数值和无效数值之间的分界点及其两边的点进行测试 二 测
  • Jmeter进阶使用指南-使用参数化

    Apache JMeter是一个广泛使用的开源负载和性能测试工具 在进行性能测试时 我们经常需要模拟不同的用户行为和数据 这时候 参数化就显得尤为重要 此文主要介绍如何在JMeter中使用参数化 什么是参数化 参数化是一种将静态值替换为动态
  • 深入理解HashMap和LinkedHashMap的区别

    简介 我们知道HashMap的变量顺序是不可预测的 这意味着便利的输出顺序并不一定和HashMap的插入顺序是一致的 这个特性通常会对我们的工作造成一定的困扰 为了实现这个功能 我们可以使用LinkedHashMap LinkedHashM
  • 【配电变电站的最佳位置和容量】基于遗传算法的最优配电变电站放置(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 基于遗传算法的最优配电变电站放置 为了实现
  • iseacms1.0漏洞复现

    iseacms1 0漏洞复现 作者 admin 时间 2021 06 29 分类 漏洞复现 Index php源码 文件包含 参数转义了 0 利用方式有限在网站目录有phpinfo php文件的前提下 payload为 index r te
  • 【十三】Nacos 服务注册和配置中心

    目录 Nacos 初识 Nacos 服务部署 注册中心服务部署 服务提供者注册到Nacos 服务消费者从Nacos获取服务 负载均衡 Nacos 服务详解 实列服务详情详解 Nacos 初识 Nacos Dynamic Naming and
  • Android 输入框的输入提示效果(AutoCompleteTextView)

    在一些体验较好的APP中 输入框输入时会有相应的提示 让人能够很快的通过点击提示进入下一步 这里 我就通过自己构思 实现了一个通过 SharedPreferences 保存的输入提示 demo 实现 1 实现一个 SharedPrefere