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