Android中密码输入内容可见性切换
今天在做项目的时候遇到了一个关于密码输入框可见性切换问题,上网搜了搜,这里面门道还不小,做一个记录吧,下次遇到就好解决了。
首先写了一个简单的测试工程:
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <EditText
- android:id="@+id/pwd_edit"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:inputType="textPassword"/>
- <Button
- android:id="@+id/pwd_switch"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="转换"/>
- </LinearLayout>
- package com.example.helloword;
- import android.app.Activity;
- import android.os.Bundle;
- import android.text.InputType;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.EditText;
- public class MainActivity extends Activity {
- EditText pwdEdit;
- boolean flag = false;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- pwdEdit = (EditText) findViewById(R.id.pwd_edit);
- Button pwdSwitch = (Button) findViewById(R.id.pwd_switch);
- pwdSwitch.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if(flag){
- pwdEdit.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
- flag = false;
- }else{
- pwdEdit.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
- flag = true;
- }
- }
- });
- }
- }
结果发现这种方法不行,显示密码后不能再隐藏。
于是就搜了一下,发现有个方法如下:
- package com.example.helloword;
- import android.app.Activity;
- import android.os.Bundle;
- import android.text.method.HideReturnsTransformationMethod;
- import android.text.method.PasswordTransformationMethod;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.EditText;
- public class MainActivity extends Activity {
- EditText pwdEdit;
- boolean flag = false;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- pwdEdit = (EditText) findViewById(R.id.pwd_edit);
- Button pwdSwitch = (Button) findViewById(R.id.pwd_switch);
- pwdSwitch.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (!flag) {
- pwdEdit.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
- } else {
- pwdEdit.setTransformationMethod(PasswordTransformationMethod.getInstance());
- }
- flag = !flag;
- pwdEdit.postInvalidate();
- }
- });
- }
- }
发现这样虽然可以了,但是光标每次切换后会回到行首,修改后的代码如下:
- package com.example.helloword;
- import android.app.Activity;
- import android.os.Bundle;
- import android.text.Selection;
- import android.text.Spannable;
- import android.text.method.HideReturnsTransformationMethod;
- import android.text.method.PasswordTransformationMethod;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.EditText;
- public class MainActivity extends Activity {
- EditText pwdEdit;
- boolean flag = false;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- pwdEdit = (EditText) findViewById(R.id.pwd_edit);
- Button pwdSwitch = (Button) findViewById(R.id.pwd_switch);
- pwdSwitch.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (!flag) {
- pwdEdit.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
- } else {
- pwdEdit.setTransformationMethod(PasswordTransformationMethod.getInstance());
- }
- flag = !flag;
- pwdEdit.postInvalidate();
- CharSequence text = pwdEdit.getText();
- if (text instanceof Spannable) {
- Spannable spanText = (Spannable)text;
- Selection.setSelection(spanText, text.length());
- }
- }
- });
- }
- }
虽然完美解决了,但是对这个HideReturnTransformationMethod和PasswordTransformationMethod很陌生,于是就上网搜了一下,发现这个类相当于是一个工具类,专门用来转换输入字符的显示的。而setTransformationMethod 则可以支持将输入的字符转换,如果需要实现自己的转换,可以通过实现 TransformationMethod 接口来达到你的目的(比如让输入的所有字符都变成 a,或者输入 a 显示 z,输入 z 显示 a 等)。
这里仅仅是个记录,如果有什么更好的方法,希望不要吝啬哦 ^_^
Android中密码输入内容可见性切换的更多相关文章
- Android中使用ImageViewSwitcher实现图片切换轮播导航效果
前面写过了使用ViewFlipper和ViewPager实现屏幕中视图切换的效果(ViewPager未实现轮播)附链接: Android中使用ViewFlipper实现屏幕切换 Android中使用V ...
- 设置cxGrid中RichEdit输入内容的格式
设置cxGrid中RichEdit输入内容的格式 (2013-09-05 23:25:31) 转载▼红鱼儿新浪博客 分类: Delphi 遇到这样的问题,利用cxGrid,将一列定义为RichEd ...
- Android中TextView输入字数统计和限制
在Android开发应用的时候,文本编辑框中最多输入140个字,经常会显示还剩多少字以限制用户输入的字数, EditText content;//定义一个文本输入框 TextView hasnum;/ ...
- Android中简单活动窗口的切换--Android
本例实现Android中简单Activity窗口切换:借助intent(意图)对应用操作(这里用按钮监听)等的描述,Android根据描述负责找对应的组件,完成组件的调用来实现活动的切换……案例比较简 ...
- Android TextWatcher监控EditText中的输入内容并限制其输入字符个数
布局中EditText在android布局中经常用到,对EditText中输入的内容也经常需要进行限制,我们可以通过TextWatcher去观察输入框中输入的内容,作个笔记. 主布局: <?xm ...
- 在Android中自动实现横竖屏切换的问题
http://developer.android.com/training/basics/supporting-devices/screens.html参照Google推荐的做法 在你项目的res 文 ...
- Android中竖线随内容高度变化而变化的问题和解决办法
项目中要求显示竖线,并且竖线高度不确定,竖线的高度要随着内容的变化而变化.不能使用match_parent 充满,也不能在布局中写死,此时使用 android:layout_height=" ...
- Android 中利用ViewFlipper 滑动屏幕切换页面,ListView展示数据
首先新建一个Android项目,命名为ViewFlipperTest 如图:项目机构,本项目主要操作图中红色箭头标注的文件 1.HgroupAdapter.java文件代码↓主要实现listview数 ...
- Android中TweenAnimation四种动画切换效果
点击每个按钮都会有对应的动画显示 activity代码: package com.tmacsky; import android.app.Activity; import android.os.Bun ...
随机推荐
- nginx安装部署+增加媒体播放模块
nginx安装很简单,但是有的时候是已经安装的nginx ,升级增加nginx 模块功能. 最近公司要nginx增加一个可以播放 MP4的模块,安装还算顺利,不说废话上命令. 1 安装依赖 yum i ...
- 洛谷——U10783 名字被和谐了
https://www.luogu.org/problem/show?pid=U10783 题目背景 众所周知,我们称g是a的约数,当且仅当g是正数且a mod g = 0. 众所周知,若g既是a的约 ...
- Android Studio中怎样引用图片资源
随着不断接触Android Studio,越来越发现和Eclipse有着巨大的差别. 不管是表面的目录结构,还是内在对各种资源的管理. 本篇就来聊聊Android Studio中怎样来显示图片. 以及 ...
- nagios 安装配置(包含nrpe端)全 (一)
一.nagios安装: 1.安装下面命令: 这是本人监控服务时自己定义插件所用到的几个系统命令.可不安装. (1)iostat:监控磁盘IO信息: apt-getinstall sysstat (2) ...
- Express框架是什么
Express框架是什么 一.总结 1.express框架:基于node.js的web应用框架,可快速搭建一个完整功能的网站,丰富的HTTP工具以及来自Connect框架的中间件随取随用. 二.Exp ...
- 指示函数(indicator function) 的作用
1. counter 指示函数常用于次数(满足某一断言或条件)的统计: 2. 二维的离散指示函数 ⇒ assignment solution xij∈{0,1},∑jxij=1 ∑jxij=1:行和为 ...
- 使用@Order调整配置类加载顺序
转自:https://blog.csdn.net/qq_15037231/article/details/78158553 4.1 @Order Spring 4.2 利用@Order控制配置类的加载 ...
- 关于Promise的详细总结
1. 异步回调 1.1 回调地狱 在需要多个操作的时候,会导致多个回调函数嵌套,导致代码不够直观,就是常说的回调地狱 1.2 并行结果 如果几个异步操作之间并没有前后顺序之分,但需要等多个异步操作都完 ...
- 学习笔记:_lodash.js常用函数2
_.pick(object, [props]) 创建一个从object中选中的属性的对象. 示例: var object = { 'a': 1, 'b': '2', 'c': 3 }; _.pick( ...
- Node.js笔记 http fs
const http=require('http'); const fs=require('fs'); var server = http.createServer(function(req, res ...