如何在Android登陆界面实现输入框内容清除和震动效果?

在Android开发中,实现一个具有清除输入框内容和震动效果的登录界面,可以提升用户体验,本文将详细介绍如何通过自定义EditText组件来实现这些功能。

如何在Android登陆界面实现输入框内容清除和震动效果?

一、自定义ClearEditText类

为了实现带有清除按钮功能的EditText,我们需要创建一个自定义的EditText类ClearEditText,这个类继承自标准的EditText,并实现了View.OnFocusChangeListener和TextWatcher接口,以下是关键代码:

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
public class ClearEditText extends EditText implements View.OnFocusChangeListener, TextWatcher {
    private Drawable mClearDrawable;
    private boolean hasFoucs;
    public ClearEditText(Context context) {
        super(context);
        init();
    }
    public ClearEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }
    public ClearEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }
    private void init() {
        mClearDrawable = getCompoundDrawables()[2];
        if (mClearDrawable == null) {
            mClearDrawable = getResources().getDrawable(R.drawable.selector_ic_delete);
        }
        mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight());
        setClearIconVisible(false);
        super.setOnFocusChangeListener(this);
        addTextChangedListener(this);
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            if (!hasFoucs || getText().toString().length() <= 0) {
                return super.onTouchEvent(event);
            }
            if (getCompoundDrawables()[2] != null && (event.getX() > getWidth() getPaddingRight() mClearDrawable.getIntrinsicWidth())) {
                this.setText("");
            }
        }
        return super.onTouchEvent(event);
    }
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        this.hasFoucs = hasFocus;
        if (hasFocus && getText().toString().length() > 0) {
            setClearIconVisible(true);
        } else {
            setClearIconVisible(false);
        }
    }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {}
    @Override
    public void afterTextChanged(Editable s) {
        if (isFocused()) {
            setClearIconVisible(s.length() > 0);
        }
    }
    private void setClearIconVisible(boolean visible) {
        Drawable right = visible ? mClearDrawable : null;
        setCompoundDrawablesWithIntrinsicBounds(0, 0, right, 0);
    }
}

二、添加震动效果

当用户点击清除按钮时,可以通过Android的Vibrator服务来添加震动效果,以下是如何在ClearEditText类中实现震动效果的代码:

import android.os.Vibrator;
import android.content.Context;
// 在构造函数中初始化Vibrator对象
private Vibrator vibrator;
public ClearEditText(Context context) {
    super(context);
    vibrator = (Vibrator) getContext().getSystemService(Context.VIBRATOR_SERVICE);
    init();
}
// 在onTouchEvent方法中添加震动效果
@Override
public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_UP) {
        if (!hasFoucs || getText().toString().length() <= 0) {
            return super.onTouchEvent(event);
        }
        if (getCompoundDrawables()[2] != null && (event.getX() > getWidth() getPaddingRight() mClearDrawable.getIntrinsicWidth())) {
            this.setText("");
            vibrator.vibrate(50); // 震动50毫秒
        }
    }
    return super.onTouchEvent(event);
}

三、XML布局文件中的使用

在XML布局文件中使用自定义的ClearEditText组件非常简单,只需指定类名即可享用其特有功能:

<com.example.myapp.ClearEditText
    android:id="@+id/editText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Enter text" />

四、相关问题与解答

Q1: 如何更改清除按钮的图标?

如何在Android登陆界面实现输入框内容清除和震动效果?

A1: 更改清除按钮的图标需要在init()方法中修改mClearDrawable的引用,可以使用以下代码:

if (mClearDrawable == null) {
    mClearDrawable = getResources().getDrawable(R.drawable.new_ic_delete); // 使用新的图标资源ID
}

确保在res/drawable文件夹中有一个名为new_ic_delete的图标文件。

Q2: 如何调整震动效果的持续时间?

A2: 震动效果的持续时间可以在调用vibrate()方法时指定,将震动时间从50毫秒改为100毫秒:

如何在Android登陆界面实现输入框内容清除和震动效果?

vibrator.vibrate(100); // 震动100毫秒

可以根据需求调整震动时间,以提供更好的用户体验。

到此,以上就是小编对于“Android登陆界面实现清除输入框内容和震动效果”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/638816.html

(0)
打赏 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
上一篇 2024-11-10 23:04
下一篇 2024-11-10 23:12

相关推荐

  • 巴拉圭动态VPS哪家好,巴拉圭拨号vps租赁价格多少

    根据我的搜索结果,以下是一些关于巴拉圭动态VPS的信息:,,- 天下数据提供巴拉圭服务器租用、巴拉圭vps云主机租用、巴拉圭云服务器租用等业务,硬件配置好,国际带宽大,各国线路访问巴拉圭服务器速度非常快。,- ADSL拨号VPS价格哪家好?国内ADSL拨号VPS厂商哪家可靠呢?全国二百多地区动态拨号VPS,资源丰富。目前来看,我们家用宽带一年少则七八百,多则上千元的费用。

    2024-01-05
    0121
  • SHELL脚本如何检查Oracle DG备库是否已经应用归档(shell脚本查询oracle数据库)

    可以使用以下shell脚本查询Oracle数据库,检查DG备库是否已经应用归档:,,“shell,#!/bin/bash,export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1,export ORACLE_SID=orcl,export PATH=$ORACLE_HOME/bin:$PATH,sqlplus -s / as sysdba ˂˂EOF,set pagesize 0 feedback off verify off heading off echo off;,select open_mode, archived_log_seq# from v\$database;,exit;,EOF,“

    2024-04-28
    0167
  • 如何自建图床

    自建一个超级简单的图床——EasyImage搭建在网络信息日益丰富的今天,图片作为一种重要的信息载体,其在网络中的传播与分享变得越来越频繁,而图床,作为一个专门用来存储和分享图片的在线服务平台,其重要性也日益凸显,本文将介绍如何自建一个超级简单的图床——EasyImage。什么是EasyImageEasyImage是一个简单的图床系统……

    2024-02-02
    0130
  • 百度云服务器密码无法输入怎么办

    当您遇到百度云服务器密码无法输入的问题时,可能是由于多种原因造成的,以下是一些可能的原因及其解决方案:1. 浏览器兼容性问题某些浏览器的安全策略或插件可能会阻止密码输入框的正常工作,确保您的浏览器是最新版,并且尝试在隐私模式下打开网页看是否解决问题。2. 键盘问题检查您的键盘是否有物理损坏或者被锁定了某些按键(如Caps Lock, ……

    2024-04-10
    0147
  • 西安网站建设企业,附详细介绍

    西安网站建设企业提供专业服务,包括网站设计、开发和优化。

    2024-02-13
    0181
  • 宝塔防火墙:简便安全的服务器保障

    宝塔防火墙是一款针对服务器安全而设计的防火墙软件,它能够有效地保护服务器免受各种网络攻击和恶意软件的侵害,宝塔防火墙具有简便易用、安全可靠的特点,是服务器管理员们的首选工具之一。宝塔防火墙提供了全面的网络安全保障,它能够对服务器的网络流量进行实时监控和分析,及时发现并阻止各种网络攻击,如DDoS攻击、SQL注入、XSS跨站脚本攻击等,……

    2023-11-16
    0234

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入