焦点事件
焦点事件是指针对于一个组件的状态的监听,例如,现在有两个文本输入组件(editA和editB),当用户选中editA组件准备输入数据的时候,对于editA就表示获得了焦点,如图6-11所示,而当用户现在离开了editA而要输入editB时,则editA将丢失焦点,同时对应的editB将获得焦点。
在android.view.View类之中专门提供了一个“View.OnFocusChangeListener”接口用于监听焦点改变事件,而所有的组件上都存在有监听焦点变化的方法:
监听焦点变化:public void setOnFocusChangeListener(View.OnFocusChangeListener l)
范例:
布局文件
<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:id="@+id/edit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="请输入查询内容"
/>
<EditText
android:id="@+id/msg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="www.baidu.com"
/>
<TextView
android:id="@+id/txt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
程序文件:
package com.richard.onfocuschangelistener;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
private EditText edit = null;
private TextView txt = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.edit = (EditText) super.findViewById(R.id.edit);
this.txt = (TextView) super.findViewById(R.id.txt);
this.edit.setOnFocusChangeListener(new OnFocusChangeListenerImpl());
this.edit.setOnClickListener(new OnClickListenerImpl());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private class OnClickListenerImpl implements OnClickListener{
@Override
public void onClick(View view) {
MainActivity.this.edit.setText(""); //清空文本
}
}
private class OnFocusChangeListenerImpl implements OnFocusChangeListener{
@Override
public void onFocusChange(View view, boolean hasFocus) {
if(view.getId() == MainActivity.this.edit.getId()){
if(hasFocus){
MainActivity.this.txt.setText("文本输入获得焦点"); //设置显示文字
}else{
if(MainActivity.this.edit.getText().length()>0) { //判断输入数据长度
MainActivity.this.txt.setText("文本输入组件失去焦点,输入内容合法.");
} else {
MainActivity.this.txt.setText("文本输入组件失去焦点,输入内容不能为空。");
}
}
}
}
}
}
展示效果: