OnFocusChangeListener接口用于处理控件焦点发生改变的事件,如对某控件注册了该监听器,则当该控件失去焦点或者获得焦点时都会触发OnFocusChangeListener接口中的回调方法onFocusChange(),接口中需要实现的方法的定义方式如下:
public void onFocusChange(View v, boolean hasFocus)
参数v表示触发焦点发生改变事件的事件源。
参数hasFocus表示v是否获取焦点
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<EditText
android:layout_width="200dp"
android:layout_height="wrap_content"
android:id="@+id/mobile"
android:text="手机号码"
android:inputType="phone"
android:ems="10"/>
<EditText
android:layout_width="200dp"
android:layout_height="wrap_content"
android:id="@+id/address"
android:text="地址"
android:ems="10"
android:inputType="textPostalAddress"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/showText"
android:text="焦点变焦情况"/>
</LinearLayout>
android:ems=“10” 表示显示10个字符长度
package com.example.a4_71;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity<hasFocus> extends AppCompatActivity {
private EditText etMobile=null;
private EditText etAddress=null;
private TextView showTextView=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etMobile=(EditText) findViewById(R.id.mobile);
etAddress=(EditText) findViewById(R.id.address);
showTextView=(TextView) findViewById(R.id.showText);
//注册监听器
etMobile.setOnClickListener(new MobileOnClickListener());
etMobile.setOnFocusChangeListener(new MobileOnFocusChangeListener());
etAddress.setOnClickListener(new AddressOnClickListener());
etAddress.setOnFocusChangeListener(new AddressOnFocusChangeListener());
}
private class MobileOnClickListener implements OnClickListener {
public void onClick(View view){
etMobile.setText(""); 点击时清空
}
}
//MobileOnFoucusChangeListene焦点事件
private class MobileOnFocusChangeListener implements View.OnFocusChangeListener {
public void onFocusChange(View view, boolean hasFocus) {
if (view.getId() == etMobile.getId()) {
if (hasFocus) {
showTextView.setText("手机号码组件获得了焦点");
} else {
showTextView.setText("手机号码组件失去了焦点");
}
}
}
}
private class AddressOnClickListener implements OnClickListener {
public void onClick(View view){
etAddress.setText("");
}
}
private class AddressOnFocusChangeListener implements View.OnFocusChangeListener {
public void onFocusChange(View view, boolean hasFocus) {
if (view.getId() == etAddress.getId()) {
if (hasFocus) {
showTextView.setText("地址组件获得了焦点");
} else {
showTextView.setText("地址组件失去了焦点");
}
}
}
}
}
显示如图