package com.qyk.douban.widget; import android.content.Context;
import android.text.Editable;
import android.text.InputType;
import android.text.Selection;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView; public class EditTextPassWordVisiable extends ViewGroup implements OnClickListener { private TextView clearImage;
private EditText editText;
private boolean pswVisiable = false;
private int clearImageRightPading = 20; private int drawableVisiable,drawableUnVisiable; private TextWatcher textWatcher = new TextWatcher() { @Override
public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override
public void afterTextChanged(Editable s) {
// if (s.length() == 0) {
// clearImage.setVisibility(View.GONE);
// } else {
// clearImage.setVisibility(View.VISIBLE);
// }
}
}; public EditTextPassWordVisiable(Context context) {
super(context);
initViews();
} public EditTextPassWordVisiable(Context context, AttributeSet attrs) {
super(context, attrs);
initViews();
} public EditTextPassWordVisiable(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initViews();
} private void initViews() {
final Context mContext = getContext();
clearImage = new TextView(mContext);
clearImage.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
clearImage.setOnClickListener(this);
editText = new EditText(mContext);
editText.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
editText.addTextChangedListener(textWatcher);
editText.setSingleLine(true);
addView(editText);
addView(clearImage);
requestLayout();
} /**
* 设置 清除图片 的资源
*
* @param drawableId
*/
public void setClearImageDrawableId(int drawableId) {
clearImage.setBackgroundResource(drawableId);
} /**
* 设置EditText的padding(如果调用了{@link #setEditTextBackGround(int)}
* 方法,其背景图片是.9图的话,必须要调用此方法)
*
* @param paddingLeft 左边的padding
* @param paddinTop 上边padding
* @param paddingRight 右边padding(这个padding是指文章到 清除图片的 padding)
* @param paddingBottom 下边padding
*/
public void setEditTextPadding(int paddingLeft, int paddinTop, int paddingRight, int paddingBottom) {
paddingRight += clearImageRightPading + clearImage.getBackground().getIntrinsicWidth();
editText.setPadding(paddingLeft, paddinTop, paddingRight, paddingBottom);
} /**
* 设置删除图片距离右边的距离
*
* @param clearImageRightPading
*/
public void setClearImageRightPadding(int clearImageRightPading) {
this.clearImageRightPading = clearImageRightPading;
requestLayout();
} /**
* 设置EditText的背景</br>Note</br>(1)调用了该方法之后,如果背景图是.9图的话,必须调用
* {@link #setEditTextPadding(int, int, int, int)}方法 </br>(2)此方法必须是调用了
* {@link #setClearImageDrawableId(int)}之后才能调用
*
* @param resid
*/
public void setEditTextBackGround(int resid) {
editText.setBackgroundResource(resid);
} public void setTextColor(int color) {
editText.setTextColor(color);
} public void setTextSize(int size) {
editText.setTextSize(size);
} @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
// int height = MeasureSpec.getSize(heightMeasureSpec);
int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
if (i == 0) {
getChildAt(i).measure(MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY),
getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));
} else {
TextView secondView = (TextView) getChildAt(i);
secondView.measure(MeasureSpec.makeMeasureSpec(secondView.getBackground().getIntrinsicWidth(), MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(secondView.getBackground().getIntrinsicHeight(), MeasureSpec.UNSPECIFIED));
}
}
setMeasuredDimension(width, getChildAt(0).getMeasuredHeight());
} @Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
final EditText firstView = editText;
final View secondView = clearImage;
final int editTextWith = firstView.getMeasuredWidth();
final int imageViewWidth = secondView.getMeasuredWidth();
firstView.layout(0, 0, editTextWith, firstView.getMeasuredHeight());
final int top = (firstView.getMeasuredHeight() - secondView.getMeasuredHeight()) >> 1;
secondView.layout(editTextWith - imageViewWidth - clearImageRightPading, top, editTextWith - clearImageRightPading, top
+ secondView.getMeasuredHeight());
} @Override
public void onClick(View v) {
pswVisiable = !pswVisiable;
if (pswVisiable) {
setClearImageDrawableId(getDrawableVisiable());
editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
Editable etable = editText.getText();
Selection.setSelection(etable, etable.length());
} else {
setClearImageDrawableId(getDrawableUnVisiable());
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
//下面两行代码实现: 输入框光标一直在输入文本后面
Editable etable = editText.getText();
Selection.setSelection(etable, etable.length());
} } /**
* 获得密码可见图标
* @return
*/
public int getDrawableVisiable() {
return drawableVisiable;
} /**
* 获得密码不可见图标
* @return
*/
public int getDrawableUnVisiable() {
return drawableUnVisiable;
} /**
* 设置密码可见的图标
* @param drawableVisiable
*/
public void setDrawableVisiable(int drawableVisiable) {
this.drawableVisiable = drawableVisiable;
} /**
* 设置密码不可见的图标
* @param drawableUnVisiable
*/
public void setDrawableUnVisiable(int drawableUnVisiable) {
this.drawableUnVisiable = drawableUnVisiable;
}
}
                clearEditText.setDrawableVisiable(R.drawable.eye_open);//必须
clearEditText.setDrawableUnVisiable(R.drawable.eye_closed);//必须
clearEditText.setClearImageDrawableId(clearEditText.getDrawableUnVisiable());//设置默认情况的图标 // clearEditText.setEditTextBackGround(R.drawable.bg_tab_search_edit);
clearEditText.setEditTextPadding(30, 20, 20, 20);
clearEditText.setClearImageRightPadding(20);
clearEditText.setTextColor(R.color.colorPrimaryDark);

  

自定义 密码是否可见 的EditView 右侧带个小眼睛的更多相关文章

  1. 基于jQuery右侧带缩略图导航的焦点图

    今天我们要来分享一款右侧带缩略图导航的jQuery焦点图插件,这款jQuery焦点图插件的特点是右侧有一列缩略图导航列表,并且可以定义任意数量的图片,你可以拖动列表来查看所有的图片,点击缩略图后,即可 ...

  2. 安装mysql的步骤并利用mysql原始密码修改自定义密码

    1.给刚下载好的mysql软件tar包,进行解包 命令:tar -xf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar 然后利用yum装包 命令:yum -y ins ...

  3. 【Azure Redis 缓存】由Azure Redis是否可以自定义密码而引申出Azure PaaS的Redis服务是否可以和自建的Redis进行主从配置呢?

    问题描述 在自建的Redis服务中,可以通过 config set requirepass <Password> 设置Redis的登录密码,然后使用auth 命令输入密码.操作命令如下: ...

  4. Chrome自带恐龙小游戏的源码研究(一)

    目录 Chrome自带恐龙小游戏的源码研究(一)——绘制地面 Chrome自带恐龙小游戏的源码研究(二)——绘制云朵 Chrome自带恐龙小游戏的源码研究(三)——昼夜交替 Chrome自带恐龙小游戏 ...

  5. IE9+浏览器input文本框/密码框后面的小叉子/小眼睛清除

    为了方便我们的触控操作,IE高等浏览器针对input及input type="password"分别提供了快速清除钮(X图标)以及密码文字显示钮(小眼睛图标)的功能. 由于这经常跟 ...

  6. ie9以上浏览器input文本框/密码框后面的小叉子/小眼睛问题

    找了很久不知什么属性控制的这个东西,经过群友的指点重要找到.

  7. 去除html页面中按钮在ios中的默认样式,去除select自带的小三角图标

    btn{-webkit-appearance: none;} -webkit-appearance: none也能去掉select下拉列表后面自带的小三角

  8. Chrome自带恐龙小游戏的源码研究(七)

    在上一篇<Chrome自带恐龙小游戏的源码研究(六)>中研究了恐龙的跳跃过程,这一篇研究恐龙与障碍物之间的碰撞检测. 碰撞盒子 游戏中采用的是矩形(非旋转矩形)碰撞.这类碰撞优点是计算比较 ...

  9. Chrome自带恐龙小游戏的源码研究(完)

    在上一篇<Chrome自带恐龙小游戏的源码研究(七)>中研究了恐龙与障碍物的碰撞检测,这一篇主要研究组成游戏的其它要素. 游戏分数记录 如图所示,分数及最高分记录显示在游戏界面的右上角,每 ...

随机推荐

  1. 用户 NT AUTHORITY\NETWORK SERVICE 登录失败

    Windows server 2003,2008 Web.Config 配置连接sql 使用 win身份验证时: 当连接sql server使用信任连接(参看Web.Config文件)时就会出这个错误 ...

  2. phpcms 03

    继续上次对header.html文件的分析 logo<a href="{siteurl($siteid)}/"><img src="{IMG_PATH} ...

  3. 2016年11月2日 星期三 --出埃及记 Exodus 19:18

    2016年11月2日 星期三 --出埃及记 Exodus 19:18 Mount Sinai was covered with smoke, because the LORD descended on ...

  4. PHP去除连续空格

    <?php $note = strip_tags($value['Content']); $note = trim($note); $note = str_replace(" &quo ...

  5. android source

    h1 { margin-bottom: 0.21cm } h1.western { font-family: "Liberation Sans", sans-serif; font ...

  6. Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨

    Java对象克隆(Clone)及Cloneable接口.Serializable接口的深入探讨 Part I 没啥好说的,直接开始Part II吧. Part II 谈到了对象的克隆,就不得不说为什么 ...

  7. 使用jquery构建Metro style 返回顶部

    个人一直对metro风格的东西情有独钟,偶然间在腾讯网看到一款小插件,蓝色Metro风格的,所以决定把它放到我的博客中,这样做应该不会有版权问题吧orz.. Complete code 后言 我把他原 ...

  8. SQL数据库约束行为---防止数据乱填(即数据规范化)

    防止乱填:一.Check约束.按照某种规则对数据进行检查.操作:在表的设计界面中,右击相应的列,选择“CHECK约束”在弹出的对话框中,设置约束的名称和表达式. 代码实现: create table ...

  9. (转)C# Winform应用程序占用内存较大解决方法整理

    背景: 微软的 .NET FRAMEWORK 现在可谓如火如荼了.但是,.NET 一直所为人诟病的就是“胃口太大”,狂吃内存,虽然微软声称 GC 的功能和智能化都很高,但是内存的回收问题,一直存在困扰 ...

  10. FreeSWITCH第三方库(其他)的简单介绍(三)

    FreeSWITCH使用了大量的第三方库,本文档主要介绍关联相关库的信息: 音频相关库的信息介绍参考:http://www.cnblogs.com/yoyotl/p/5486753.html 视频相关 ...