常用事件:
事件的监听类似于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());