事件驱动机制高级UI消息提示机制.docx
- 文档编号:26756683
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:30
- 大小:485.88KB
事件驱动机制高级UI消息提示机制.docx
《事件驱动机制高级UI消息提示机制.docx》由会员分享,可在线阅读,更多相关《事件驱动机制高级UI消息提示机制.docx(30页珍藏版)》请在冰豆网上搜索。
事件驱动机制高级UI消息提示机制
Android基础
三、Android事件驱动机制2
3.1点击事件2
3.1.1点击事件四种书写方式2
3.2选择事件4
3.2.1复选事件4
3.2.2单选事件5
3.2.3下拉列表选择5
3.3长按与触屏事件6
3.4键盘事件7
四、Android高级UI8
4.1ProgressBar8
4.2RatingBar8
4.3ToggleButton9
4.4ScrollView10
4.5ListView10
五、Android消息提示机制12
5.1Logcat日志猫13
5.2Toast瞬时提示13
5.3对话框15
5.3.1标准对话框15
5.3.2菜单式对话框17
5.3.3复选对话框18
5.3.4自定义对话框21
5.3.5对话框优化22
三、Android事件驱动机制
一般,用户经常会通过界面与应用交互,Android框架一般采用事件驱动的形式与用户交互,那如何处理用户界面中触发的事件?
可以通过从用户交互的View设置事件监听器的方式来实现对事件的处理,一个事件监听器是View类中一个包含单一回调方法的接口。
当注册了监听器的View发生了对应的监听事件时,Android框架就会回调相应的监听方法,实现与用户的交互
*常见的用户事件
点击事件、选择事件、触屏事件、长按事件、按键事件
3.1点击事件
单击事件是事件机制中最常见的事件,通过对控件绑定View.OnClickListener实现单击事件的监听
3.1.1点击事件四种书写方式
&私有类实现方式
&匿名内部类实现方式
&布局中对控件添加android:
onClick
&Activity实现监听接口
*案例:
对按钮按键监听
对四个按钮实现监听,分别用四种不同的书写方式实现单击监听事件
*界面设计
*代码实现
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_click_event);
//1.通过内部类形式实现
inner();
//2.通过匿名内部类形式实现
anonymouns();
//4.Activity实现监听接口方式
Buttonbutton=(Button)findViewById(R.id.activity);
button.setOnClickListener(this);
}
/**
*通过匿名内部类形式实现单击监听
*/
privatevoidanonymouns(){
Buttonbutton=(Button)findViewById(R.id.anonymouns);
button.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
Toast.makeText(ClickEventActivity.this,"匿名内部类实现方式",Toast.LENGTH_SHORT).show();
}
});
}
//通过内部类的方式实现
privatevoidinner(){
Buttonbutton=(Button)findViewById(R.id.inner);
button.setOnClickListener(newMyListener());
}
//3.通过XML方式实现
publicvoidclickByXml(Viewv){
Toast.makeText(ClickEventActivity.this,"布局中设置onClick属性实现方式",Toast.LENGTH_SHORT).show();
}
privateclassMyListenerimplementsView.OnClickListener{
@Override
publicvoidonClick(Viewv){
Toast.makeText(ClickEventActivity.this,"内部类实现方式",Toast.LENGTH_SHORT).show();
}
}
//4、通过对Activity实现单击监听接口实现方式
@Override
publicvoidonClick(Viewv){
Toast.makeText(ClickEventActivity.this,"Activity实现监听接口方式",Toast.LENGTH_SHORT).show();
}
3.2选择事件
3.2.1复选事件
复选事件的监听接口:
CompoundButton.OnCheckedChangeListener
复选控件CheckBox有两种状态:
选中与未选中状态,对复选控件
*案例:
明密文切换
通过对CheckBox控件的复选监听,实现对EditText内容明密文切换
*界面设计
*代码实现
/*
*通过对CheckBox复选监听实现明密文切换
*/
privatevoidcheckBox(){
finalEditTextinfoEdt=(EditText)findViewById(R.id.info_edt);
CheckBoxcheckBox=(CheckBox)findViewById(R.id.checkbox);
checkBox.setOnCheckedChangeListener(new
CompoundButton.OnCheckedChangeListener(){
@Override
publicvoidonCheckedChanged(CompoundButtonbuttonView,
booleanisChecked){
if(isChecked){
////把EditText隐藏的文本内容还原
infoEdt.setTransformationMethod(new
HideReturnsTransformationMethod());
}else{
//把EditText的内容用密码的方式隐藏起来
infoEdt.setTransformationMethod(new
PasswordTransformationMethod());
}
}
});
}
3.2.2单选事件
单选事件的监听接口:
RadioGroup.OnCheckedChangeListener
RadioButton与RadioGroup组合使用才能实现单选功能
*案例:
选择字符集
通过对RadioButton控件的选择监听,实现对字符集的选择
*界面设计
*代码实现
privatevoidsingleCheck(){
finalTextViewcharSet=(TextView)findViewById(R.id.charSet);
RadioGroupradioGroup=(RadioGroup)findViewById(R.id.radioGroup1);
//对单选组添加选择监听事件
radioGroup.setOnCheckedChangeListener(newRadioGroup.
OnCheckedChangeListener(){
/**选择状态改变监听
*RadioGroup:
单选组
*checkedId:
被改变的控件的资源id
*/
publicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){
//通过通过findViewById找到所选择的RadioButton
RadioButtonradioButton=(RadioButton)findViewById(checkedId);
charSet.setText(radioButton.getText().toString());
}
});
}
3.2.3下拉列表选择
下拉事件的监听接口:
AdapterView.OnItemSelectedListener
*案例:
城市选择
通过对Spinner下拉列表监听,实现对城市的选择
*界面设计
*代码实现
privatevoidspinner(){
//通过资源ID获得字符串数组
finalString[]citys=getResources().getStringArray(R.array.city);
Spinnerspinner=(Spinner)findViewById(R.id.spinner);
spinner.setPrompt("请选择城市");
spinner.setOnItemSelectedListener(newAdapterView.OnItemSelectedListener(){
@Override
/**下拉项选择监听
*AdapterView:
下拉项的父控件:
Spinner
*View:
当前选择的Item项
*Position:
选择项的位置
*id:
选择项的行号
*/
publicvoidonItemSelected(AdapterView
>parent,Viewview,
intposition,longid){
Toast.makeText(context,citys[position],Toast.LENGTH_SHORT).show();
}
@Override
publicvoidonNothingSelected(AdapterView
>arg0){
}
});
}
3.3长按与触屏事件
长按事件监听接口:
View.OnLongClickListener
触屏事件监听接口:
View.OnTouchListener
*案例:
长按图标设置手机桌面壁纸
clearWallpaper:
清除桌面壁纸
setWallpaper(BitMapbitmap):
设置桌面壁纸
设置壁纸要添加权限:
name="android.permission.SET_WALLPAPER"/> *代码实现 privatevoidsetWallPaper(){ ImageViewimage=(ImageView)findViewById(R.id.image); //对图片添加触屏监听 image.setOnTouchListener(newView.OnTouchListener(){ @Override publicbooleanonTouch(Viewv,MotionEventevent){ System.out.println("触屏监听"); returnfalse; } }); //对图片添加长按监听,实现设置手机壁纸的功能 image.setOnLongClickListener(newView.OnLongClickListener(){ @Override publicbooleanonLongClick(Viewv){ try{ //清除屏幕壁纸 clearWallpaper(); Bitmapbitmap=BitmapFactory .decodeResource(getResources(),R.drawable.ic_launcher); //设置壁纸 setWallpaper(bitmap); }catch(IOExceptione){ e.printStackTrace(); } System.out.println("长按监听"); returnfalse; } }); } 3.4键盘事件 Activity实现了KeyEvent.backcall接口 onKeyDown(intkeyCode,KeyEventevent): 当键按下去触发 onBackPress(): 当返回键按下去触发,Activity的方法 模拟器常见的按键: Back返回键 Home手机屏幕桌面 Ctrl+F11切换模拟器横竖屏幕 F2手机菜单 F3电话面板 F8手机网络开关 四、Android高级UI 4.1ProgressBar ProgressBar进度条,常用于文件下载进度显示、系统初始化进度等,默认情况是没有进度值的(转圈圈) *提示点: style="@android: style/Widget.ProgressBar.Horizontal"样式设置 setProgress(int)设置当前进度值 getProgress()得到当前进度值 setMax(int)设置最大值 案例: 通过按钮设置进度条进度 *界面设计: *代码实现 //设置进度条的最大值 progressBar.setMax(10); addBtn.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ //获得当前的进度值 intprogress=progressBar.getProgress(); //设置进度值 progressBar.setProgress(progress+1); } }); 4.2RatingBar RatingBar评分进度条,常用于对商品、用户的评价,比如满意度调查等 *提示点: setOnRatingBarChangeListener设置监听器 setNumStars设置星星的个数(设置总分) setStepSize设置分数间隔 getRating获得当前的分数值 setRating设置当前的分数值 案例: 对欧冠精彩程度打分 *界面设计: *代码实现 //设置星星的数量 ratingBar.setNumStars(5); //设置步长值 ratingBar.setStepSize(0.5f); //添加评分控件值改变的监听 ratingBar.setOnRatingBarChangeListener(newRatingBar.OnRatingBarChangeListener(){ /**ratingBar: 评分控件 *rating: 当前的值 *fromUser: 是不是用户操作 */ publicvoidonRatingChanged(RatingBarratingBar,floatrating, booleanfromUser){ if(fromUser){ Log.v("RatingBarfromuser",rating+""); }else{ Log.v("RatingBarnofromuser",rating+""); } } }); 4.3ToggleButton ToggleButton: 开关按钮,它是CompoundButton的子类,实现开与关的效果,比如蓝牙开关、wifi开关、声音开关等 *提示点: -实现的监听接口: CompoundButton.OnCheckedChangeListener 该接口是监听开关按钮状态的改变 -toggle(): 取反操作 -xml属性设置 textOn: 表示状态为开的提示文本 textOff: 表示状态为关的提示文本 案例: 设置声音开关 *界面设计 *代码实现 toggleButton.setOnCheckedChangeListener(newCompoundButton.OnCheckedChangeListener(){ /**选择状态改变的监听 * *@parambuttonView: toggleButton *@paramisChecked: 表示当前的开关按钮控件的状态 */ @Override publicvoidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked){ Toast.makeText(AdvanceUIActivity.this,isChecked? "声音开": "声音关",Toast.LENGTH_LONG).show(); //toggleButton.toggle();//取反,每一次点击开关按钮会自动取反 } }); 4.4ScrollView ScrollView: 滚屏视图,它是FrameLayout的子类,能够被用户滚动的布局容器,它只能拥有一个子控件,经常应用于一个垂直方向的线性布局中。 ScrollView只支持垂直滚动,对于需要水平滚动,则用HorizontalScollView 4.5ListView ListView列表框,常用控件,用来显示相同数据结构的批量数据,比如: 从数据库获取的数据列表,从网络解析的批量结构数据,一般都会采用ListView展示数据,系统中的设置、未接来电、通信录等显示可采用ListView进行展示 用ListView展示数据的四个步骤: 列表项描述、初始化数据、适配器数据装配、设置适配器 案例: 在ListView中显示好友列表 *界面设计与分析: *代码实现 //引用ListView控件 ListViewsettingListView=(ListView)findViewById(R.id.setting_listView); /** *1、描述列表项,设置列表项的布局 *2、初始化数据: ArrayList *3、把数据通过数据适配器装配到ListView中 */ //初始化数据 ArrayList HashMap //生成假数据 for(inti=1;i<12;i++){ item=newHashMap item.put("icon",R.drawable.emoji_044+i);//添加的是图片资源的ID item.put("title","设置"+i); //向数组列表添加map data.add(item); } //简单数据适配器 /** *context: 上下文 *data: 数据源ArrayList *resource: 列表项布局资源id *from: 装配数据--数据从哪里来 *to: 装配数据--数据到那里去 */ String[]from={"icon","title"}; int[]to={R.id.icon,R.id.title}; SimpleAdapteradapter=newSimpleAdapter(this,data,R.layout.setting_item,from,to); //装配数据到ListView中,对ListView设置数据适配器 settingListView.setAdapter(adapter); } 五、Android消息提示机制 在某些情况下,可能需要你去通知用户发生在你应用中的事件,其中一些事件需要用户响应,有的则不需要。 Android框架通过消息机制很好的完成上述的需求。 比如: -当一个事件完成时(比如保存文件),需要显示一个简短的消息来确认保存成功 -假如应用正在后台运行,且需要用户注意,那么该应用需要创建一个通知以方便用户做出响应 -假如用户要操作一个危险的操作,则应该创建一个对话框通知,再一次确认用户的操作 常见的消息提示方式有: -Logcat(日志猫) -Toast(瞬时提示) -Dialog(对话框) -Notification(通知) 5.1Logcat日志猫 *级别: v、d、i、w、e级别由低往高 -verbose: 混淆的,所有信息都可以输出,级别最低 -debug: 调试级别 -info: 信息级别 -warning: 警告级别 -error: 错误级别 *添加过滤器按照Tag进行过滤 *System.out.println()与Log输出之间的区别 -System.out.println()输出的信息等级是info级别,标记tag: System.out -System.out.print()输出信息需要System.out.flush()刷缓存输出 5.2Toast瞬时提示 Toast通知是一种浮现在屏幕上层的消息提醒,它只填充消息所需要的空间,而当前正在运行的活动仍然保持其自身的可见性和交互性。 这种通知自动淡入淡出且不接受交互事件 通过代码自定义Toast *代码实现 //通过代码的形式自定义Toast publicvoiddiyToast1(Viewv){ //声明一个Toast对象 Toasttoast=newTo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 事件 驱动 机制 高级 UI 消息 提示
![提示](https://static.bdocx.com/images/bang_tan.gif)