一、焦点事件
焦点事件是指针对于一个组件的状态的监听。在一个界面往往存在多种组件,当用户操作某一个组件时,该组件就获得焦点。在android.view.View类中专门提供了一个View.OnFocusChangeListener接口用于监听焦点改变事件,而所有的组件上都存在有监听焦点变化的方法,其语法如下:
public voidsetOnFocusChangeListener(View.OnFocusChangeListener)
例1
程序运行效果截图:
实现过程:
1. 编写main.xml布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#00ff00"> <EditText android:id="@+id/edit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="请输入查询内容:"/> <EditText android:id="@+id/message" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="blog.csdn.net/running"/> <TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </LinearLayout>
2. 编写MainActivity.java
import android.app.Activity; import android.os.Bundle; 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 text = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); edit = (EditText)findViewById(R.id.edit); text = (TextView)findViewById(R.id.text); edit.setOnFocusChangeListener(new OnFocusChangeListenerImpl()); edit.setOnClickListener(new OnClickListenerImpl()); } private class OnClickListenerImpl implements OnClickListener{ @Override public void onClick(View view){ edit.setText("");//清空文本 } } private class OnFocusChangeListenerImpl implements OnFocusChangeListener{ @Override public void onFocusChange(View v, boolean hasFocus){ if(hasFocus){ text.setText("文本输入框获得了焦点!"); }else{ if(edit.getText().length() > 0){ text.setText("文本输入框失去焦点,内容不为空!"); }else{ text.setText("文本输入框失去焦点,内容为空!"); } } } } }
二、长按事件
长按事件是指按某个组件2秒钟后才会触发这一操作,长按事件使用View.OnLongClickListener接口进行事件的处理操作,此接口定义如下:
Public staticinterface View.OnLongClickListener{
Public Boolean onLongClick(View v);
}
此接口可以处理使用setOnLongClickListener()方法绑定的事件,当事件触发后使用onLongClick()方法执行具体的事件处理操作。下面我们完成一个功能:程序首先使用ImageView显示一张图片,当用户长按此图片后就会将它设置为手机的桌面背景。为此,我们先来看一下Activity类中定义的操作手机桌面的几个方法。
(1)清除已有的手机屏幕:public void clearWallpaper()
(2)通过Bitmap设置手机屏幕:public void setWallpaper(Bitmap bitmap)
(3)通过输入流设置手机屏幕:public void setWallpaper(InputStream data)
(4)取得当前的手机屏幕信息:public Drawable getWallpaper()
程序中使用的图片资源保存在 drawable-x 文件夹中,如果想要将指定的图片设置为背景图片,就要取得图片的资源(Resource)。要想取得一个图片的InputStream对象,则要按以下方法进行:Resource对象.openRawResource(资源ID)。此外,由于这种设置手机桌面背景的操作属于手机的支持服务,所以要先申请相关授权后才可以执行。所以应在AndroidManifest.xml文件中增加以下授权操作(表示允许用户设置手机桌面背景):
<sues-permissionandroid:name=”android.permission.SET_WALLPAPER”>
程序运行效果截图:
实现过程:
1. 编写main.xml文件
<?xml version="1.0"encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#00ff00"> <TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="长按图片将其设置为桌面背景"/> <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/images_1"/> </LinearLayout>
2. 编写MainActivity.java
import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnLongClickListener; import android.widget.ImageView; import android.widget.TextView; public class MainActivity extends Activity { private ImageView image = null; private TextView text = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); image = (ImageView)findViewById(R.id.image); text = (TextView)findViewById(R.id.text); image.setOnLongClickListener(new OnLongClickListenerImpl()); } private class OnLongClickListenerImpl implements OnLongClickListener{ @Override public boolean onLongClick(View view){ try{ //清除已有桌面背景 MainActivity.this.clearWallpaper(); //设置新的桌面背景 MainActivity.this.setWallpaper(image.getResources().openRawResource(R.drawable.images_1)); text.setText("手机桌面背景已修改!"); }catch(Exception e){ text.setText("手机桌面背景设置失败!"); } return true; } } }
3. 在AndroidManifest.xml中加入授权
<sues-permissionandroid:name=”android.permission.SET_WALLPAPER”>