Android:实现EditText在获得焦点后消去hint,失去焦点后再显示原来的hint

本文介绍了如何在Android中实现在EditText获得焦点时隐藏hint,失去焦点后恢复显示hint。通过设置OnFocusChangeListener监听焦点变化,并在代码中处理逻辑。同时解决了EditText默认获取焦点导致hint不显示的问题,通过为父布局添加focusable属性实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
 >


    <EditText 
        android:id="@+id/edt_test_one"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:hint="test"/>
    
    <EditText 
        android:layout_marginTop="50dp"
        android:layout_below="@id/edt_test_one"
        android:id="@+id/edt_test_two"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:hint="test"/>
 
</RelativeLayout>


在使用EditText时,我们经常使用Android:hint = "***" 来设置EditText的输入提示,简单布局如上,其效果图如下:


如图:

可以看到我们通过hint这一属性设置了EditText的输入提示,如XML代码中设置的一样,显示为了test,但可以看到,EditText在获得焦点后,输入提示并没有消失,有时候我们希望EditText在获得焦点时隐藏输入提示,下面就来讲解怎么实现这一效果。


其实原理很简单,就是监听EditText的获取焦点事件,为EditText设置焦点变化监听器 OnFocusChangeListener,

重写其onFocusChange方法,处理相关逻辑即可,代码如下:


	
	@Override
	public void onFocusChange(View v,boolean hasFocus){
		
		EditText textView = (EditText)v;
		String hint = null;
		
		switch (v.getId()) {	
		case R.id.edt_test_one:
		if(hasFocus){
			hint = v.getHint().toString();
			v.setTag(hint);
			v.setHint("");
		}else{
			</span>hint = v.getTag().toString();
		v.setHint(hint);
		}
			break;
		default:
			break;
		}
	}


该方法会判断View是否获得了焦点,在获得焦点时,先用一个String变量把Hint存起来,并以Tag的形式捆绑在View(即获得焦点的EditText)上,然后再重新用setHint的方法将输入提示设置为""。这样,获得焦点的EditText就会先把原来的输入提示存起来,再重新设置成"",即没有输入提示。而EditText失去焦点后,再把之前以Tag形式捆绑的hint取出来,重新设置即可。


但还要注意一点,程序运行时第一个EditText貌似会自动获取焦点,那么用户可能就看不到你之前设置好的输入提示了,解决这个问题也不难,只需要给EditText控件所在的父布局设置两个属性即可。

分别为:

android:focusable="true"
android:focusableInTouchMode="true"


这样,程序运行时EditText就不会自动获取焦点,输入提示也就能正常显示了。

最后放出效果图:






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值