热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android中怎么利用EditTextLayout自定义密码输入

Android中怎么利用EditTextLayout自定义密码输入?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求

Android中怎么利用EditTextLayout自定义密码输入?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

布局




  

  

用于密码输入的自定义控件

/**
 * Created by showdy on 2017/3/15.
 * 

 * 一个用于密码输入的自定义控件  */ public class PwdEditLayout extends LinearLayout implements TextWatcher, View.OnFocusChangeListener,     View.OnClickListener, CompoundButton.OnCheckedChangeListener {   private ImageView mDeleteIcon;   private CheckBox mShiftIcon;   private EditText mEditText;   public PwdEditLayout(Context context) {     this(context, null);   }   public PwdEditLayout(Context context, AttributeSet attrs) {     this(context, attrs, 0);   }   public PwdEditLayout(Context context, AttributeSet attrs, int defStyleAttr) {     super(context, attrs, defStyleAttr);     setOrientation(HORIZONTAL);     setCustomBackground();   }   private void setCustomBackground() {     GradientDrawable gd = new GradientDrawable();     gd.setCornerRadius(TypedValue.applyDimension(COMPLEX_UNIT_DIP, 4, Resources.getSystem().getDisplayMetrics()));     gd.setStroke((int) TypedValue.applyDimension(COMPLEX_UNIT_DIP, 1, Resources.getSystem().getDisplayMetrics()), Color.BLUE);     if (Build.VERSION.SDK_INT < 16) {       this.setBackgroundDrawable(gd);     } else {       this.setBackground(gd);     }   }   /**    * Called when a new child is aded to this ViewGroup. Overrides should always    * call super.onViewAdded.    *    * @param child the added child view    */   @Override   public void onViewAdded(View child) {     super.onViewAdded(child);     if (child instanceof EditText) {       if (getChildCount() != 1) {         throw new IllegalArgumentException("Only one EditText can be added in this layout.");       }       mEditText = (EditText) child;       mEditText.setBackgroundColor(Color.TRANSPARENT);       //关键点1       LayoutInflater.from(getContext()).inflate(R.layout.layout_edittext_pwd, this, true);       mDeleteIcon = (ImageView) findViewById(R.id.delete);       mShiftIcon = (CheckBox) findViewById(R.id.ck_shift);       //关键点2       setAddStatesFromChildren(true); //使得父类获得和子控件相同的状态       mEditText.addTextChangedListener(this);       mEditText.setOnFocusChangeListener(this);       mDeleteIcon.setOnClickListener(this);       mShiftIcon.setOnCheckedChangeListener(this);       //设置默认状态---删除按钮和是否显示密码       mShiftIcon.setChecked(false);       updateDeleteIcon(mEditText.getText().toString(), mEditText.isFocused());       updateShowPassword(mShiftIcon.isChecked());     }   }   @Override   public void beforeTextChanged(CharSequence s, int start, int count, int after) {   }   @Override   public void onTextChanged(CharSequence s, int start, int before, int count) {     updateDeleteIcon(s.toString(), mEditText.isFocused());   }   @Override   public void afterTextChanged(Editable s) {   }   @Override   public void onFocusChange(View v, boolean hasFocus) {     updateDeleteIcon(mEditText.getText().toString(), hasFocus);   }   @Override   public void onClick(View v) {     switch (v.getId()) {       case R.id.delete:         mEditText.setText("");         break;     }   }   @Override   public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {     updateShowPassword(isChecked);   }   /**    * 用于是否显示密码    *    * @param password    * @param focused    */   private void updateDeleteIcon(String password, boolean focused) {     if (!TextUtils.isEmpty(password) && focused) {       mDeleteIcon.setVisibility(VISIBLE);     } else {       mDeleteIcon.setVisibility(INVISIBLE);     }   }   /**    * 用于控制是否显示密码    *    * @param checked    */   private void updateShowPassword(boolean checked) {     if (checked) {       mEditText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());     } else {       mEditText.setTransformationMethod(PasswordTransformationMethod.getInstance());     }     mEditText.setSelection(mEditText.getText().toString().length());   } }

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程笔记行业资讯频道,感谢您对编程笔记的支持。


推荐阅读
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 本文提供了关于数据库设计的建议和注意事项,包括字段类型选择、命名规则、日期的加入、索引的使用、主键的选择、NULL处理、网络带宽消耗的减少、事务粒度的控制等方面的建议。同时还介绍了使用Window Functions进行数据处理的方法。通过遵循这些建议,可以提高数据库的性能和可维护性。 ... [详细]
  • 在加载一个第三方厂商的dll文件时,提示“找不到指定模块,加载失败”。由于缺乏必要的技术支持,百思不得期间。后来发现一个有用的工具 ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • ①页面初始化----------收到客户端的请求,产生相应页面的Page对象,通过Page_Init事件进行page对象及其控件的初始化.②加载视图状态-------ViewSta ... [详细]
author-avatar
和你在一起1979
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有