【Android学习】自定义文本框和输入监听

实现功能

以上代码可实现功能:

1 自定义文本框样式

2. 文本框触发形式转变

3. 文本框输入长度监听,达到最大长度关闭软键盘

4. password框触发检测phone框内容 

1. drawable自定义形状

我创建了editor_focus.xml 和 editor_unfocus.xml,两者仅边界颜色不同

editor_focus.xml代码

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><!--    指定文本框内部颜色--><solid android:color="#ffffff" /><!--    声明边界线颜色--><strokeandroid:width="1dp"android:color="#0000ff" /><!--    使用圆角--><corners android:radius="5dp" /><!--    指定形状四个方向的间距--><paddingandroid:bottom="2dp"android:left="2dp"android:right="2dp"android:top="2dp" /></shape>

editor_unfocus.xml代码

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><!--    指定文本框内部颜色--><solid android:color="#ffffff" /><!--    声明边界线颜色--><strokeandroid:width="1dp"android:color="#888888" /><!--    使用圆角--><corners android:radius="5dp" /><!--    指定形状四个方向的间距--><paddingandroid:bottom="2dp"android:left="2dp"android:right="2dp"android:top="2dp" /></shape>

2. drawable自定义selector

selector的作用为不同的触发事件,编辑框有不同的形式。创建过程和上述shape创建过程类似,只是将shape改为 selector即可。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/editor_focus" android:state_focused="true" /><item android:drawable="@drawable/editor_unfocus" />
</selector>

3. 创建 empty Activity

4.设置layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><EditTextandroid:id="@+id/et_phone"android:layout_width="match_parent"android:layout_height="50dp"android:background="@drawable/editor_selector"android:hint="请输入电话号码"android:maxLength="11"android:inputType="text"android:layout_marginTop="5dp"/><EditTextandroid:id="@+id/et_password"android:layout_width="match_parent"android:layout_height="50dp"android:background="@drawable/editor_selector"android:hint="请输入密码"android:maxLength="6"android:inputType="textPassword"android:layout_marginTop="5dp"/></LinearLayout>

5.Java代码

Activity

package com.example.learn;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;import com.example.learn.utils.ViewUtil;public class EditerHideActivity extends AppCompatActivity implements View.OnFocusChangeListener{private EditText et_phone;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_editer_hide);et_phone = findViewById(R.id.et_phone);EditText et_password = findViewById(R.id.et_password);//设置Text changeListeneret_phone.addTextChangedListener(new HideTextWatch(et_phone,11));et_password.addTextChangedListener(new HideTextWatch(et_password,6));//设置password框focus时对phone自动检测et_password.setOnFocusChangeListener(this);}@Overridepublic void onFocusChange(View view, boolean b) {//如果获取聚焦if(b){String str = et_phone.getText().toString();if(!"".equals(str) && str.length()<11){et_phone.requestFocus();Toast.makeText(this,"电话号码不足11位",Toast.LENGTH_SHORT).show();}}}private class HideTextWatch implements TextWatcher {private EditText mView;private int maxLen;public HideTextWatch(EditText v, int len) {this.mView = v;this.maxLen=len;}@Overridepublic void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void afterTextChanged(Editable editable) {//获取文本框输入的文本String str = editable.toString();//判断是否输入的字符串与maxLen一致//一致则关软键盘if(str.length() == this.maxLen){//EditerHideActivity.this 外部类的 activity//this:HideTextWatchViewUtil.hideKeyboard(EditerHideActivity.this,mView);}}}
}

Util

package com.example.learn.utils;import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.view.inputmethod.InputMethodManager;public class ViewUtil {//当输入达到对应长度后 隐藏键盘public static void hideKeyboard(Activity act, View v){//从系统服务中获取输入法管理器InputMethodManager im = (InputMethodManager) act.getSystemService(Context.INPUT_METHOD_SERVICE);//将系统输入软件盘隐藏im.hideSoftInputFromWindow(v.getWindowToken(),0);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/831782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round 943 (Div. 3 ABCDEFG1G2题) 视频讲解

A. Maximize? Problem Statement You are given an integer x x x. Your task is to find any integer y y y ( 1 ≤ y < x ) (1\le y<x) (1≤y<x) such that gcd ⁡ ( x , y ) y \gcd(x,y)y gcd(x,y)y is maximum possible. Note that if there is more tha…

计算机毕业设计Python+Spark考研预测系统 考研推荐系统 考研数据分析 考研大数据 大数据毕业设计 大数据毕设

安顺学院本科毕业论文(设计)题目申请表 院别&#xff1a;数学与计算机科学 专业&#xff1a;数据科学与大数据 时间&#xff1a;2022年 5月26日 题 目 情 况 题目名称 基于hive数据仓库的考研信息离线分析系统的设计与实现 学生姓名 杨娣荧 学号 201903144042 …

华为鸿蒙系统(Huawei HarmonyOS)

华为鸿蒙系统&#xff08;华为技术有限公司开发的分布式操作系统&#xff09; 华为鸿蒙系统&#xff08;HUAWEI HarmonyOS&#xff09;&#xff0c;是华为公司在2019年8月9日于东莞举行的华为开发者大会&#xff08;HDC.2019&#xff09;上正式发布的分布式操作系统。 华为鸿蒙…

CLIP模型-中文-通用领域-large部署

CLIP模型-中文-通用领域-large 官网 LLM微调文档 快速开始

基于免疫粒子群算法的考虑负荷需求相应的热电联供系统优化调度(MATLAB实现)

为了实现基于免疫粒子群算法的考虑负荷需求相应的热电联供系统优化调度&#xff0c;我们可以按照以下步骤进行&#xff1a; 1. 定义目标函数&#xff1a;根据热电联供系统的运行成本、环境效益等因素&#xff0c;构建目标函数。 2. 初始化免疫粒子群算法参数&#xff1a;包括种…

使用DependencyCheck工具检测JAR依赖包的安全漏洞

引言 Dependency-Check 是一个开源工具,用于检测软件项目中使用的第三方库和组件是否存在已知的安全漏洞。它可以帮助开发团队及时发现和解决项目中的潜在安全风险,从而提高软件的安全性。 该工具通过分析项目的依赖关系,识别其中使用的第三方库和组件,并与已知的漏洞数据…

代码随想录算法训练营第四十二天

我家娃可太好看了&#xff0c;有点担心月嫂走了没法照顾娃。 明天没有新的题&#xff0c;所以我今天开个头吧。又懒了。 01背包问题 二维 思路看了一遍&#xff0c;默写一下哈。甚至看了两遍&#xff0c;但是还没开始搞。。。振作起来&#xff01;&#xff01;&#xff01; 目…

IOS 开发 - block 使用详解

1.Blobk的定义 block的写法相对难记,不必司机应被,只需要在xcode里打出"inlineBlock"--回车, 系统会自动帮你把基础版写法给你匹配出来 //Block的基础声明//等号""之前是blobk的声明,等号“”后面是block的实现/*returnType:返回类型(void、int、String *…

如何使用 Nginx、MySQL、 PHP 在 Ubuntu 22.04 上安装 WordPress

Apache通常是部署WordPress的首选&#xff0c;因为它被广泛使用&#xff0c;配置简单&#xff0c;并且与WordPress的要求具有强大的兼容性。 然而&#xff0c;Nginx是一个可行的替代方案&#xff0c;并提供了自己的一系列优势。Nginx以其高性能而闻名&#xff0c;特别是在处理…

速盾:高防CDN-完美防御

如今&#xff0c;网络安全已成为企业和个人不可忽视的重要问题之一。随着网络技术的不断发展&#xff0c;网络攻击的手段也越来越复杂和隐蔽。因此&#xff0c;保护网络的安全性变得尤为重要。针对网络攻击的防护手段也在不断升级和完善。其中&#xff0c;高防CDN作为一种完美的…

Java面试题:什么是线程安全,如何使代码线程安全?

线程安全是指在多线程环境中&#xff0c;代码能够正确地工作而不会导致数据不一致或程序崩溃。当多个线程访问共享资源时&#xff0c;如果这些线程的执行顺序是不确定的&#xff0c;可能会导致数据的不一致性。为了确保线程安全&#xff0c;需要采取一定的措施来控制对共享资源…

zabbix监控Tongweb7企业版(by lqw+sy)

此贴参考zabbix通过jmx监控Tongweb7企业版&#xff08;by lqw&#xff09;&#xff0c;是在此帖子的基础和同事整理的文档基础上重新部署验证的优化版&#xff0c;使用的是centos7。 优点&#xff1a; 1.不需要通过jmx配置进行监控。&#xff08;jmx配置需要修改tongweb的配置…

大模型预训练与微调

一、基础知识 机器学习数学原理&#xff1a;梯度下降&#xff08;gradient descent&#xff09;在机器学习中应用十分的广泛&#xff0c;不论是在线性回归还是Logistic回归中&#xff0c;它的主要目的是通过迭代找到目标函数的最小值&#xff0c;或者收敛到最小值。深度学习 …

[leetcode]最多公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 示例 1&#xff1a; 输入&#xff1a;strs ["flower","flow","flight"] 输出&#xff1a;"fl"示例 2&#xff1a; 输…

IO复用技术(1)——select/poll/epoll原理介绍及使用案例

文章目录 1.Select1.1 工作流程1.2 fd_set函数1.3 select函数1.4 例程 2.poll2.1 poll函数2.2 例程 3.epoll3.1 工作流程3.2 相关函数3.3 epoll的两种工作模式3.4 示例代码 4.总结 原理&#xff1a;使用一个线程来检查多个文件描述符&#xff0c;委托内核进行检查&#xff0c;如…

Mac OS系统如何更新

用了好几年的Mac Book安装软件经常提示需要更高的系统版本&#xff0c;因此要升级系统版本&#xff0c;但是开始在系统设置里面找了一下没有找到升级的按钮&#xff0c;找了资料后才知道如何升级。有以下两种入口 一、App Store搜索MacOs&#xff0c;在出现的搜索结果中选择下载…

新的排序算法

我发现了 石油 新的排序算法&#xff01;&#xff01;&#xff01; 算法&#xff1a; 定义布尔数组a[NUM] (我也不知道NUM的值) 输入 n&#xff0c;循环输入n次整数x,每次输入把a[x]的值改为1&#xff0c;输出每个 a[i]1 的 i 是有序序列 算法时间复杂度 O(n) 空间占用(字节…

微服务----nacos配置及简单使用

目录 什么是nacos 项目在nacos上进行注册 注入nacos依赖 配置application.yml文件 nacos写入配置文件 首先&#xff0c;还是需要导入依赖 然后在nacos中编写配置文件 prod是我自定义的一个命名空间&#xff0c;在这里面进行配置文件编写~ 启动类上加上注解 编写Patt…

2013NOIP普及组真题 2. 表达式求值

线上OJ&#xff1a; 一本通&#xff1a;http://ybt.ssoier.cn:8088/problem_show.php?pid1962 核心思想&#xff1a;&#xff08;模拟&#xff09; 本题的符号只有 和 ∗ * ∗&#xff0c;没有括号&#xff0c;没有表达式的合法性判断&#xff0c;所以逻辑上不复杂。只需…

SpringBoot+Vue项目企业客户管理系统

一、前言介绍 本文主要论述了如何使用JAVA语言开发一个企业客户管理系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述企业客户管理系统的当前背景以及系统开…