android 仿简书评论,Android 开发仿简书登录框可删除内容或显示密码框的内容

简书App 是我很喜欢的一款软件。今天就模仿了一下他的登录框。先上图:

b0b121889de89abfe7bfb4a4bbedc05b.gif

好了下面上代码,自定义ImgEditText 继承与EditText。重写一些方法。

package lyf.myimgedittextdemo;

import android.content.Context;

import android.graphics.Rect;

import android.graphics.drawable.Drawable;

import android.text.Editable;

import android.text.TextWatcher;

import android.util.AttributeSet;

import android.view.MotionEvent;

import android.widget.EditText;

/**

* lyf on 2016/12/6.

* 自定义的EditText右边带图片,可以设置点击事件

*/

public class ImgEditText extends EditText implements TextWatcher {

//控件左边的图片

private Drawable leftDrawable = null;

//控件右边的图片

private Drawable rightDrawable = null;

// 控件是否有焦点

private boolean hasFoucs;

private IMyRightDrawableClick mightDrawableClick;

public ImgEditText(Context context) {

this(context, null);

}

public ImgEditText(Context context, AttributeSet attrs) {

//这里构造方法也很重要,不加这个很多属性不能再XML里面定义

this(context, attrs, android.R.attr.editTextStyle);

}

public ImgEditText(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

init();

}

//初始化基本图片

private void init() {

//获取RadioButton的图片集合

Drawable[] drawables = getCompoundDrawables();

leftDrawable = drawables[0];

rightDrawable = drawables[2];

setCompoundDrawablesWithIntrinsicBounds(leftDrawable, null, null, null);

//设置输入框里面内容发生改变的监听

addTextChangedListener(this);

}

//设置显示图片的大小

public void setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom) {

super.setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom);

//这里只要改后面两个参数就好了,一个宽一个是高,如果想知道为什么可以查找源码

if (left != null) {

left.setBounds(0, 0, 50, 50);

}

if (right != null) {

right.setBounds(0, 0, 50, 50);

}

if (top != null) {

top.setBounds(0, 0, 100, 100);

}

if (bottom != null) {

bottom.setBounds(0, 0, 100, 100);

}

setCompoundDrawables(left, top, right, bottom);

}

//光标选中时判断

@Override

protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {

super.onFocusChanged(focused, direction, previouslyFocusedRect);

this.hasFoucs = focused;

if (focused) {

setImageVisible(getText().length() > 0);

} else {

setImageVisible(false);

}

}

//设置清除图标的显示与隐藏,调用setCompoundDrawables为EditText绘制上去

protected void setImageVisible(boolean flag) {

//如果当前右侧有图片则覆盖右侧的图片,如果没有还是显示原来的图片

if (getCompoundDrawables()[2] != null) {

rightDrawable = getCompoundDrawables()[2];

}

if (flag) {

setCompoundDrawables(getCompoundDrawables()[0], null, rightDrawable, null);

} else {

setCompoundDrawables(getCompoundDrawables()[0], null, null, null);

}

}

//文本框监听事件

@Override

public void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {

if (hasFoucs) {

if (text.length() > 0) {

setImageVisible(true);

} else {

setImageVisible(false);

}

}

}

public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

public void afterTextChanged(Editable s) {

}

/**

* 因为我们不能直接给EditText设置点击事件,所以我们用记住我们按下的位置来模拟点击事件

* 当我们按下的位置 在 EditText的宽度 - 图标到控件右边的间距 - 图标的宽度 和

* EditText的宽度 - 图标到控件右边的间距之间我们就算点击了图标,竖直方向就没有考虑

* (参考 http://blog.csdn.net/xiaanming/article/details/11066685/)

*/

@Override

public boolean onTouchEvent(MotionEvent event) {

if (event.getAction() == MotionEvent.ACTION_UP) {

if (getCompoundDrawables()[2] != null) {

boolean touchable = event.getX() > (getWidth() - getTotalPaddingRight())

&& (event.getX() < ((getWidth() - getPaddingRight())));

if (touchable) {

//调用点击事件(外部实现)

mightDrawableClick.rightDrawableClick();

}

}

}

return super.onTouchEvent(event);

}

//设置右侧按钮的点击事件,外部调用的时候实现该方法

public void setDrawableClick( IMyRightDrawableClick myMightDrawableClick){

this.mightDrawableClick = myMightDrawableClick;

}

//自定义接口(实现右边图片点击事件)

public interface IMyRightDrawableClick {

void rightDrawableClick();

}

//允许外部修改右侧显示的图片

public void setRightDrawable(Drawable drawable){

rightDrawable = drawable;

setCompoundDrawablesWithIntrinsicBounds(leftDrawable, null, rightDrawable, null);

}

}

以上就是自定义类的主要代码了,注释比较清楚。

布局布局文件里直接引用就好。

android:id="@+id/pwdIet"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_weight="1"

android:background="@null"

android:drawableLeft="@mipmap/mm_image"

android:drawableRight="@mipmap/eye_normal"

android:paddingLeft="15dp"

android:paddingRight="15dp"

android:paddingTop="5dp"

android:drawablePadding="15dp"

android:layout_marginTop="10dp"

android:layout_marginBottom="10dp"

android:hint="密码"

android:inputType="numberPassword" />

下面看代码中的设置

pwdIet = (ImgEditText) this.findViewById(R.id.pwdIet);

pwdIet.setDrawableClick(new ImgEditText.IMyRightDrawableClick() {

@Override

public void rightDrawableClick() {

if (isHidden) {

//设置EditText文本为可见的

pwdIet.setTransformationMethod(HideReturnsTransformationMethod.getInstance());

pwdIet.setRightDrawable(getResources().getDrawable(R.mipmap.eye_selected));

} else {

//设置EditText文本为隐藏的

pwdIet.setTransformationMethod(PasswordTransformationMethod.getInstance());

pwdIet.setRightDrawable(getResources().getDrawable(R.mipmap.eye_normal));

}

isHidden = !isHidden;

pwdIet.postInvalidate();

//切换后将EditText光标置于末尾

CharSequence charSequence = pwdIet.getText();

if (charSequence instanceof Spannable) {

Spannable spanText = (Spannable) charSequence;

Selection.setSelection(spanText, charSequence.length());

}

}

});

这样我们的例子就完成了。

以上所述是小编给大家介绍的Android 开发仿简书登录框可删除内容或显示密码框的内容,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对找一找教程网网站的支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
水资源是人类社会的宝贵财富,在生活、工农业生产中是不可缺少的。随着世界人口的增长及工农业生产的发展,需水量也在日益增长,水已经变得比以往任何时候都要珍贵。但是,由于人类的生产和生活,导致水体的污染,水质恶化,使有限的水资源更加紧张。长期以来,油类物质(石油类物质和动植物油)一直是水和土壤中的重要污染源。它不仅对人的身体健康来极大危害,而且使水质恶化,严重破坏水体生态平衡。因此各国都加强了油类物质对水体和土壤的污染的治理。对于水中油含量的检测,我国处于落后阶段,与国际先进水平存在差距,所以难以满足当今技术水平的要求。为了取得具有代表性的正确数据,使分析数据具有与现代测试技术水平相应的准确性和先进性,不断提高分析成果的可比性和应用效果,检测的方法和仪器是非常重要的。只有保证了这两方面才能保证快速和准确地测量出水中油类污染物含量,以达到保护和治理水污染的目的。开展水中油污染检测方法、技术和检测设备的研究,是提高水污染检测的一条重要措施。通过本课题的研究,探索出一套适合我国国情的水质污染现场检测技术和检测设备,具有广泛的应用前景和科学研究价值。 本课题针对我国水体的油污染,探索一套检测油污染的可行方案和方法,利用非分散红外光度法技术,开发研制具有自主知识产权的适合国情的适于野外便携式的测油仪。利用此仪器,可以检测出被测水样中亚甲基、甲基物质和动植物油脂的污染物含量,为我国众多的环境检测站点监测水体的油污染状况提供依据。
### 内容概要 《计算机试卷1》是一份综合性的计算机基础和应用测试卷,涵盖了计算机硬件、软件、操作系统、网络、多媒体技术等多个领域的知识点。试卷包括单选题和操作应用两大类,单选题部分测试学生对计算机基础知识的掌握,操作应用部分则评估学生对计算机应用软件的实际操作能力。 ### 适用人群 本试卷适用于: - 计算机专业或信息技术相关专业的学生,用于课程学习或考试复习。 - 准备计算机等级考试或职业资格认证的人士,作为实战演练材料。 - 对计算机操作有兴趣的自学者,用于提升个人计算机应用技能。 - 计算机基础教育工作者,作为教学资源或出题参考。 ### 使用场景及目标 1. **学习评估**:作为学校或教育机构对学生计算机基础知识和应用技能的评估工具。 2. **自学测试**:供个人自学者检验自己对计算机知识的掌握程度和操作熟练度。 3. **职业发展**:帮助职场人士通过实际操作练习,提升计算机应用能力,增强工作竞争力。 4. **教学资源**:教师可以用于课堂教学,作为教学内容的补充或学生的课后练习。 5. **竞赛准备**:适合准备计算机相关竞赛的学生,作为强化训练和技能检测的材料。 试卷的目标是通过系统性的题目设计,帮助学生全面复习和巩固计算机基础知识,同时通过实际操作题目,提高学生解决实际问题的能力。通过本试卷的学习与练习,学生将能够更加深入地理解计算机的工作原理,掌握常用软件的使用方法,为未来的学术或职业生涯打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值