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

android笔记【三】—–事件处理

2014年01月17日 ⁄ 综合 ⁄ 共 3431字 ⁄ 字号 评论关闭

常用事件:

事件的监听类似于flash中的AS3,应该是ECMA的统一规定。

处理方法格式on+xxx  /   绑定监听器格式set+On+xxx+Listener

onClick()/setOnClickListener()

onLongClick()

onFocusChange()

onKey()

onTouch()

onCreateContextMenu()

使用:

获取控件后附加监听器如

 

 

this.but.setOnClickListener(new OnClickBut(){//匿名内部类,只使用一次。

public onClick(){

this.showView.setText("被点击了")

}

});

 或者使用内部类处理

this.but.setOnClickListener(new OnClickBut())



private class OnClickBut implements OnClickListener{

public onClick(View v){

this.showView.setText("被点击了");

}

}

 

 屏幕横竖事件

设置/获取手机屏幕状态

set/getRequestedOrientaion()

onConfigurationChanged()系统设置发生改变时

当前的屏幕情况ActivityInfo.SCREEN_ORIENTAION_LANDSCAPE / PORTRAIT / UNSPECIFIED 横竖无

 

例子:

public class MainActivity extends Activity {
	private Button bt;
	private TextView tv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 
       this.bt=(Button)super.findViewById(R.id.bt1);
       this.tv=(TextView)super.findViewById(R.id.tv1);
       this.bt.setOnClickListener(new OnButClick());
      
    }
    
    private class OnButClick implements OnClickListener{
	public void onClick(View v) {
		  MainActivity.this.tv.setText("点击");
		if(MainActivity.this.getRequestedOrientation()==ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED){
			
			MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
			MainActivity.this.tv.setText("现在是横屏");
			
		}else
			if(MainActivity.this.getRequestedOrientation()==ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
			{	
				
				MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
				MainActivity.this.tv.setText("现在是竖屏");
		}else{
			MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
			MainActivity.this.tv.setText("现在是横屏");
		}
	}
    }

 另外,在切换横竖屏时有很重要的一点:安卓默认是重载相应控件的这样会造成textview的字始终是默认文字。而不是“现在是横屏”、竖屏。

这就需要我们在androidManifest.xml中的那个activity标签中添加android:configChanges="orientation"表示方向设置改变时不重载。

 

设置password明文显示

可以使用password.setTransformationMethod(HideReturnTransformationMethod.getInstance())明文显示

或者password.setTransformationMethod(PasswordTransformationMethod.getInstance())星号显示

 radio控件改变事件

onCheckedChanged 实现的方法

set+OnCheckedChanged+Listener

下拉列表事件

单击

onItemClick实现方法

set+onItemClick+Listener

改变

onItemSelected

获取所选value:parent.getItemAtPosition(position).toString();

长按

onItemLongClick

多级列表:

private Spinner city = null; // 下拉列表框内容
	private Spinner area = null; // 二级列表
	private String[][] areaData = new String[][] {
			{ "东城", "西城", "朝阳", "大兴", "平谷" }, // 针对于一级的子信息
			{ "黄浦", "杨浦", "闵行" }, // 针对于二级的子信息
			{ "广州" } // 针对于三级的子信息
	}; // 子菜单项
	private ArrayAdapter<CharSequence> adapterArea = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.main);
		this.city = (Spinner) super.findViewById(R.id.city); // 取得下拉列表框
		this.area = (Spinner) super.findViewById(R.id.area); // 取得下拉列表框
		this.city.setOnItemSelectedListener(new OnItemSelectedListenerImpl());
	}

	private class OnItemSelectedListenerImpl implements OnItemSelectedListener {

		public void onItemSelected(AdapterView<?> parent, View view,
				int position, long id) { // 表示选项改变的时候触发
			MySpinnerListenerDemo.this.adapterArea = new ArrayAdapter<CharSequence>(
					MySpinnerListenerDemo.this,
					android.R.layout.simple_spinner_item,
					MySpinnerListenerDemo.this.areaData[position]); // 定义所有的列表项
			MySpinnerListenerDemo.this.area
					.setAdapter(MySpinnerListenerDemo.this.adapterArea);// 设置二级下拉列表的选项内容
		}

		public void onNothingSelected(AdapterView<?> arg0) { // 表示没有选项的时候触发
			// 一般此方法现在不关心
		}
	}

 时间选择器事件监听

实现事件:

onDateChanged

onTimeChanged

但Date的事件监听器是init,而不是listener。

this.date.init(this.date.getYear(), this.date.getMonth(),
    this.date.getDayOfMonth(), new OnDateChangedListenerImpl());
 

抱歉!评论已关闭.