现在的位置: 首页 > 综合 > 正文

23_焦点事件和长按事件

2013年03月06日 ⁄ 综合 ⁄ 共 4273字 ⁄ 字号 评论关闭

一、焦点事件

  焦点事件是指针对于一个组件的状态的监听。在一个界面往往存在多种组件,当用户操作某一个组件时,该组件就获得焦点。在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”>

抱歉!评论已关闭.