版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主讲教师:日期:第5章用户界面设计Android程序设计目录/CONTENTS5.1高级组件5.2消息提示框与对话框1.了解常用的对话框。2.熟练使用常用的高级组件。3.掌握应用消息提示框的使用方法。学习目标4.掌握常用对话框的使用方法。5.1高级组件5.1.1 自动完成文本框自动完成文本框(AutoCompleteTextView)比普通编辑框添加了一个功能:当用户输入一定字符后,自动完成文本框会显示一个下拉菜单,供用户从中选择,当用户选择了某个菜单项后,自动完成文本框就会按用户选择自动填写该文本框。5.1高级组件【例5-1】实现一个带自动提示功能的搜索框。布局代码如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><MultiAutoCompleteTextViewandroid:id="@+id/main_mact"android:layout_width="match_parent"android:layout_height="wrap_content"android:completionThreshold="1"android:hint="请输入课程"android:singleLine="true"/></LinearLayout>5.1高级组件Java代码如下:publicclassMainActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);MultiAutoCompleteTextViewmact=(MultiAutoCompleteTextView)findViewById(R.id.main_mact);Stringarray[]={"Android讲义","Android疯狂讲义","Android项目实战","Android开发案例教程","Android网络开发","Android开发基础"};ArrayAdapter<String>adapter=newArrayAdapter<String>(this,android.R.layout.simple_list_item_1,array);mact.setTokenizer(newMultiAutoCompleteTextView.CommaTokenizer());mact.setAdapter(adapter);}}5.1高级组件运行结果如图5-1所示。5.1高级组件5.1.2 进度条进度条(ProgressBar)是UI界面中一种实用的UI组件。它用于显示一个耗时操作的百分比。Andriod支持多种风格的进度条,可以通过style属性为ProgressBar指定风格,该属性支持如下几种属性值:@android:style/Widget.ProgressBar.Horizontal:水平进度条。@android:style/Widget.ProgressBar.Inverse:细的、顺时针旋转的中等圆形普通进度条。@android:style/Widget.ProgressBar.Large:粗的、顺时针旋转的大圆形进度条。@android:style/Widget.ProgressBar.Large.Inverse:粗的、顺时针旋转的大圆形普通进度条。@android:style/Widget.ProgressBar.Small:细的、顺时针旋转的小圆形进度条。@android:style/Widget.ProgressBar.Small.Inverse:细的、顺时针旋转的小圆形普通进度条。5.1高级组件5.1高级组件【例5-2】水平进度条的用法示例。<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutandroid:orientation="vertical"android:layout_height="match_parent"android:layout_width="match_parent"xmlns:android="/apk/res/android"><!--水平进度条--><ProgressBarandroid:layout_height="wrap_content"android:layout_width="match_parent"android:max="100"style="@android:style/Widget.ProgressBar.Horizontal"android:id="@+id/progressBar1"android:layout_centerHorizontal="true"/><!--圆形进度条--><ProgressBarandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:max="100"style="?android:attr/progressBarStyleLarge"android:id="@+id/progressBar2"android:layout_centerHorizontal="true"/></LinearLayout>5.1高级组件Java代码如下:publicclassMainActivityextendsActivity{privateProgressBarhorizonP;//水平进度条privateProgressBarcircleP;//圆形进度条privateintmProgressStatus=0;//完成进度privateHandlermHandler;//用于处理消息的Handler类的对象@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取水平进度条和圆形进度条horizonP=(ProgressBar)findViewById(R.gressBar1);circleP=(ProgressBar)findViewById(R.gressBar2);//通过匿名内部类实例化处理消息的Handler类的对象,//并重写handleMessage()方法,实现耗时操作没有完成时更新进度条mHandler=newHandler(){@OverridepublicvoidhandleMessage(Messagemsg){if(msg.what==0x111){horizonP.setProgress(mProgressStatus);//更新进度}else{Toast.makeText(MainActivity.this,"耗时操作已完成",Toast.LENGTH_SHORT).show();//设置进度条不显示,并且不占用空间horizonP.setVisibility(View.GONE);//设置进度条不显示,并且不占用空间circleP.setVisibility(View.GONE);}5.1高级组件}};//开启一个线程,用于模拟耗时操作,在线程中,调用setMessage()发送处理消息newThread(newRunnable(){@Overridepublicvoidrun(){while(true){mProgressStatus=doWork();//获取耗时操作完成的百分比Messagem=newMessage();if(mProgressStatus<100){m.what=0x111;mHandler.sendMessage(m);//发送消息}else{m.what=0x110;mHandler.sendMessage(m);//发送消息break;}}}//模拟一个耗时操作privateintdoWork(){mProgressStatus+=Math.random()*10;//改变完成进度try{Thread.sleep(200);//线程休眠200毫秒}catch(InterruptedExceptione){e.printStackTrace();}returnmProgressStatus;//返回新的进度}}).start();//开启线程}}5.1高级组件运行结果如图5-2所示。5.1高级组件5.1.3 拖动条和星级评分条拖动条(SeekBar)用于对Android系统中的某项数值进行调节,如音量、亮度等。在开发中,程序员可通过设置android:thumb属性来改变滑块外观(需要指定一个Drawable对象,将该对象作为自定义滑块)。为了让程序能够响应拖动条滑块位置的改变,我们可以为它绑定一个监听器(OnSeekBarChangeListener)。5.1高级组件【例5-3】在屏幕上显示拖动条。布局代码如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="进度:80"android:textSize="15sp"android:paddingTop="90dp"android:paddingLeft="10dp"tools:layout_editor_absoluteY="10dp"tools:layout_editor_absoluteX="10dp"/><SeekBarandroid:id="@+id/seekBar1"android:layout_height="wrap_content"android:max="100"android:layout_width="match_parent"android:progress="80"android:paddingTop="90dp"tools:layout_editor_absoluteY="10dp"tools:layout_editor_absoluteX="10dp"/></LinearLayout>5.1高级组件Java代码如下:publicclassMainActivityextendsActivity{privateSeekBarseekBar;//拖动条@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取文本视图finalTextViewresult=(TextView)findViewById(R.id.textView1);//获取拖动条,并添加事件监听器seekBar=(SeekBar)findViewById(R.id.seekBar1);seekBar.setOnSeekBarChangeListener(newOnSeekBarChangeListener(){@OverridepublicvoidonProgressChanged(SeekBararg0,intarg1,booleanarg2){result.setText("当前值:"+arg1);}@OverridepublicvoidonStartTrackingTouch(SeekBararg0){Toast.makeText(MainActivity.this,"开始滑动",Toast.LENGTH_SHORT).show();}@OverridepublicvoidonStopTrackingTouch(SeekBararg0){Toast.makeText(MainActivity.this,"结束滑动",Toast.LENGTH_SHORT).show();}});}}5.1高级组件运行结果如图5-3所示。5.1高级组件星级评分条表示对某一事物或应用的支持、评价,或对某种应用服务的满意程度等。在开发星级评分条时,程序员可以直接通过拖动星星图案来改变进度。5.1高级组件【例5-4】在屏幕上显示星级评分条。布局代码如下:<?xmlversion="1.0"?><LinearLayoutandroid:orientation="vertical"android:layout_height="match_parent"android:layout_width="match_parent"xmlns:android="/apk/res/android"><!--星级评分条--><RatingBarandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:rating="4"android:numStars="5"android:isIndicator="false"android:id="@+id/ratingBar1"/><Buttonandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:id="@+id/button1"android:text="提交"/>tools:layout_editor_absoluteY="10dp"</LinearLayout>5.1高级组件Java代码如下:publicclassMainActivityextendsActivity{privateRatingBarratingBar;//星级评分条@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取星级评分条ratingBar=(RatingBar)findViewById(R.id.ratingBar1);//获取按钮,并添加单击事件监听器Buttonbutton=(Button)findViewById(R.id.button1);button.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewarg0){intresult=ratingBar.getProgress();//获取进度floatrating=ratingBar.getRating();//获取等级floatstep=ratingBar.getStepSize();//获取每次最少改变多少颗星Log.i("星级评分条","step="+step+"result="+result+"rating="+rating);Toast.makeText(MainActivity.this,"获得了"+rating+"颗星",Toast.LENGTH_SHORT).show();}});}}5.1高级组件运行结果如图5-4所示。5.1高级组件5.1.4 选项卡选项卡(TabHost)的主要功能是进行分类管理。创建选项卡newTabSpec(Stringtag)创建选项卡addTab(TabHost.TabSpectabSpec)添加选项卡选项卡的实现步骤(1)在布局代码中添加所需的TabHost、TabWidget和FrameLayout组件。(2)编写各标签页所对应的XML布局代码。(3)在Activity中,获取并初始化TabHost组件。(4)为TabHost对象添加标签页。5.1高级组件【例5-5】显示本地音乐和网络音乐选项卡。布局代码如下:<TabHostxmlns:android="/apk/res/android"android:id="@android:id/tabhost"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"><LinearLayoutandroid:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><!--TabWidget组件id值不可变--><TabWidgetandroid:id="@android:id/tabs"android:layout_width="match_parent"android:layout_height="wrap_content"></TabWidget><!--FrameLayout布局,id值不可变-->5.1高级组件<FrameLayoutandroid:id="@android:id/tabcontent"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_above="@android:id/tabs"><!--第一个tab的布局--><LinearLayoutandroid:id="@+id/tab1"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="第一个tab的布局"/></LinearLayout><!--第二个tab的布局--><LinearLayoutandroid:id="@+id/tab2"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="第二个tab的布局"/></LinearLayout></FrameLayout></LinearLay5.1高级组件Java代码如下:publicclassMainActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TabHosttab=(TabHost)findViewById(android.R.id.tabhost);//初始化TabHost容器tab.setup();//在TabHost创建标签,然后设置:标题/图标/标签页布局tab.addTab(tab.newTabSpec("tab1").setIndicator("本地音乐",null).setContent(R.id.tab1));tab.addTab(tab.newTabSpec("tab2").setIndicator("网络音乐",null).setContent(R.id.tab2));}}5.1高级组件运行结果如图5-5所示。5.1高级组件5.1.5 图像切换器Android图像切换器(ImageSwitch)是一种能够实现图像序列播放的组件,类似于用Windows照片查看器单击左右按钮实现按顺序查看照片的功能。ImageSwitch继承了ViewSwitch,重写了ViewSwitch的showNext()、showprevious()两个方法。ImageSwitch提供了一个ViewFactory接口,ViewFactory生成的View组件必须是ImageView。进行图片切换时,只要调用setImageResource(intresid)方法更换图片即可。5.1高级组件【例5-6】ImageSwitch的用法示例。布局代码如下:<LinearLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:id="@+id/LinearLayout1"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><TextViewandroid:id="@+id/show"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginLeft="20dp"android:layout_marginTop="20dp"android:text="我是当前图片的信息~"android:textSize="24dp"/><LinearLayoutandroid:layout_width="match_parent"5.1高级组件android:layout_height="wrap_content"android:orientation="vertical"><ImageSwitcherandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/image"android:layout_gravity="center"android:background="#666666"></ImageSwitcher><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:gravity="center"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="上一张"android:layout_marginLeft="20dp"android:textSize="24dp"android:id="@+id/up"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="下一张"android:layout_marginLeft="20dp"android:textSize="24dp"android:id="@+id/down"/></LinearLayout></LinearLayout></LinearLayout>5.1高级组件Java代码如下:publicclassMainActivityextendsActivity{//成员变量1:保存要显示的图片id的数组TextViewshow=null;Buttonup,dowm=null;ImageSwitcherimage=null;int[]images=newint[]{R.drawable.img01,R.drawable.img02,R.drawable.img03,R.drawable.img04,R.drawable.img05,R.drawable.img06,R.drawable.img07,R.drawable.img08};privateintindex=0;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取控件show=(TextView)findViewById(R.id.show);up=(Button)findViewById(R.id.up);dowm=(Button)findViewById(R.id.down);image=(ImageSwitcher)findViewById(R.id.image);5.1高级组件//为获取到的控件添加显示效果:淡入动画和淡出动画image.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));image.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));//为图像切换器设置一个ViewFactory,并重写makeView方法image.setFactory(newViewFactory(){@OverridepublicViewmakeView(){//指定视图切换工程returnnewImageView(MainActivity.this);}});image.setImageResource(images[index]);show.setText("一共有"+images.length+"张图片,当前是第"+(index+1)+"张图片");//当单击按钮时,图像切换并显示相应的信息up.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewarg0){if(index>0)index--;elseindex=images.length-1;image.setImageResource(images[index]);show.setText("一共有"+images.length+"张图片,当前是第"+(index+1)+"张图片");}});//同理,当单击按钮时,图像切换并显示相应的信息dowm.setOnClickListener(newOnClickListener(){publicvoidonClick(Viewarg0){if(index<images.length-1)index++;elseindex=0;image.setImageResource(images[index]);show.setText("一共有"+images.length+"张图片,当前是第"+(index+1)+"张图片");}});}5.1高级组件运行结果如图5-6所示。5.1高级组件5.1.6 网格视图网格视图(GridView)是Android常用的规划容器,视图自身分为有行列的矩阵,用单元格放置自己的组件和内容,通常是放图片和文字。网格视图和列表视图有着共同的父类AbsListView,区别在于ListView显示的是一个列,而GridView可以控制列的数目。数据配置方面,GridView和ListView类似,都要通过适配器进行数据配置。5.1高级组件【例5-7】Gridview以行、列的形式来组织所有图片。布局代码如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><GridViewandroid:horizontalSpacing="20dp"android:verticalSpacing="20dp"android:columnWidth="100dp"android:numColumns="auto_fit"android:id="@+id/gView"android:layout_width="wrap_content"android:layout_height="match_parent"/></LinearLayout>5.1高级组件Java代码如下:publicclassMainActivityextendsActivity{privateint[]mImages=newint[]{R.drawable.img01,R.drawable.img02,R.drawable.img03,R.drawable.img04,R.drawable.img05,R.drawable.img06,R.drawable.img07,R.drawable.img08,R.drawable.img09};@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);GridViewgView=(GridView)findViewById(R.id.gView);//建立数据源,设置adaptergView.setAdapter(newImageAdapter());}classImageAdapterextendsBaseAdapter{publicintgetCount(){returnmImages.length;}publicObjectgetItem(intposition){returnmImages[position];}publiclonggetItemId(intposition){returnmImages[position];}publicViewgetView(intposition,Viewview,ViewGroupparent){ImageViewimageView=newImageView(MainActivity.this);imageView.setLayoutParams(newGridView.LayoutParams(500,500));imageView.setPadding(5,5,5,5);imageView.setImageResource(mImages[position]);returnimageView;}}}5.1高级组件运行结果如图5-7所示。5.1高级组件5.1.7 画廊视图画廊(Gallery)能够按水平方向显示内容,并且用户可用手指直接拖动图片。画廊一般用来浏览图片,被选中的选项位于中间,并且可用影响事件显示信息。在使用画廊视图时,应首先在屏幕上添加Gallery组件。使用画廊视图,也需要使用Adapter显示的数据。通常使用BaseAdapter类为Gallery组件提供数据。5.1高级组件【例5-8】Gallery使用示例。布局代码如下:<LinearLayoutxmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"><ImageViewandroid:id="@+id/imageView"android:layout_width="match_parent"android:layout_height="0dip"android:layout_weight="1"/><Galleryandroid:id="@+id/gallery"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="25dip"android:unselectedAlpha="0.6"android:spacing="5px"/></LinearLayout>5.1高级组件Java代码如下:publicclassMainActivityextendsActivity{//数据源privateint[]imageIds=newint[]{R.drawable.flower01,R.drawable.flower02,R.drawable.flower03,R.drawable.flower04,R.drawable.flower05,R.drawable.flower06};privateGallerygallery;privateImageViewimageView;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);gallery=(Gallery)findViewById(R.id.gallery);imageView=(ImageView)findViewById(R.id.imageView);BaseAdapteradapter=newBaseAdapter(){@OverridepublicViewgetView(intposition,Viewview,ViewGroupparent){//创建一个ImageViewImageViewimageView=newImageView(MainActivity.this);imageView.setImageResource(imageIds[position]);//设置ImageView的缩放类型imageView.setScaleType(ImageView.ScaleType.FIT_XY);//为imageView设置布局参数imageView.setLayoutParams(newGallery.LayoutParams(75,90));TypedArraytypedArray=obtainStyledAttributes(R.styleable.Gallery);returnimageView;}5.1高级组件@OverridepubliclonggetItemId(intposition){returnposition;}@OverridepublicObjectgetItem(intitem){returnitem;}@OverridepublicintgetCount(){returnimageIds.length;}};gallery.setAdapter(adapter);gallery.setOnItemSelectedListener(newOnItemSelectedListener(){@OverridepublicvoidonItemSelected(AdapterView<?>parent,Viewview,intposition,longid){imageView.setImageResource(imageIds[position]);}@OverridepublicvoidonNothingSelected(AdapterView<?>view){}});}}5.1高级组件运行结果如图5-8所示。5.1高级组件直接由Activity的方法启用。要在窗口上显示进度条,需要经过如下步骤:(1)调用Activity的requestWindowFeature()方法,该方法根据传入的参数可启用特定的窗口特征,例如传入Window.FEATURE_INDETERMINATE_PROGRESS在窗口标题上显示不带进度的进度条;传入Window.FEATURE_PROGRESS则显示带进度的进度条。(2)调用Activity的setProgressBarVisibility(boolean)或setProgressBarIndeterminateVisibility(boolean)方法即可控制进度条的显示和隐藏。5.1.8 显示在标题上的进度条5.1高级组件【例5-9】在标题上显示进度条。布局代码如下:<LinearLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginLeft="10dp"android:orientation="vertical"><Buttonandroid:id="@+id/btn1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="显示"/><Buttonandroid:id="@+id/btn2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="隐藏"/></LinearLayout>5.1高级组件Java代码如下:publicclassMainActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);//以下两句代码必须写在setContentView之前,否则不起作用requestWindowFeature(Window.FEATURE_PROGRESS);//进度指示器功能requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);setContentView(R.layout.activity_main);Buttonbtn1=(Button)findViewById(R.id.btn1);Buttonbtn2=(Button)findViewById(R.id.btn2);//展示标题栏进度条btn1.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){setProgressBarVisibility(true);setProgressBarIndeterminateVisibility(true);}});//隐藏标题栏进度条btn2.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){setProgressBarVisibility(false);setProgressBarIndeterminateVisibility(false);}});}5.1高级组件运行结果如图5-9所示。5.1高级组件Android幻灯片式的图片浏览器里面用到了画廊视图Gallery和图像切换器ImageSwitcher两个类。其中画廊视图能够按水平方向显示内容,并且用户可用手指直接拖动图片,一般用来浏览图片,被选中的选项位于中间,并且可以响应事件显示信息。在使用画廊视图时,应首先在屏幕上添加Gallery组件,通常在XML布局代码中添加。5.1.9 幻灯片式图片浏览器5.1高级组件【例5-10】应用画廊视图和图像切换器实现幻灯片式图片浏览器。布局代码如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"android:id="@+id/layout1"android:gravity="center_horizontal"/><ImageSwitcherandroid:id="@+id/imageSwitcher"android:layout_width="wrap_content"android:layout_height="wrap_content"android:paddingTop="30px"android:layout_weight="2"/><Galleryandroid:id="@+id/gallery1"android:spacing="5px"android:layout_weight="1"android:unselectedAlpha="0.6"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout>5.1高级组件Java代码如下:publicclassMainActivityextendsActivity{//定义并初始化保存图片id的数组privateint[]imageId=newint[]{R.drawable.flower01,R.drawable.flower02,R.drawable.flower03,R.drawable.flower04,R.drawable.flower05,R.drawable.flower06};//声明一个图像切换器对象privateImageSwitcherimageSwitcher;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取gallery组件Gallerygallery=(Gallery)findViewById(R.id.gallery1);//获取图像切换器imageSwitcher=(ImageSwitcher)findViewById(R.id.imageSwitcher);//设置动画效果imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));//设置淡入动画imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));//设置淡出动画imageSwitcher.setFactory(newViewFactory(){@OverridepublicViewmakeView(){//实例化一个imageView类的对象ImageViewimageView=newImageView(MainActivity.this);//设置保持纵横比居中缩放图像imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);imageView.setLayoutParams(newImageSwitcher.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));returnimageView;//返回imageView对象}});BaseAdapteradapter=newBaseAdapter(){@OverridepublicViewgetView(intposition,Viewview,ViewGroupparent){ImageViewimageView;//声明ImageView的对象if(convertView==null){//实例化ImageView的对象imageView=newImageView(MainActivity.this);//设置缩放方式imageView.setScaleType(ImageView.ScaleType.FIT_XY);imageView.setLayoutParams(newGallery.LayoutParams(180,135));imageView.setPadding(5,0,5,0);//设置imageView的内边距}else{imageView=(ImageView)convertView;}//为imageView设置要显示的图片imageView.setImageResource(imageId[position]);5.1高级组件returnimageView;//返回ImageView}//功能:获得当前选项的id@OverridepubliclonggetItemId(intposition){returnposition;}//功能:获得当前选项@OverridepublicObjectgetItem(intposition){returnposition;}//获得数量@OverridepublicintgetCount(){returnimageId.length;}};gallery.setAdapter(adapter);//将适配器与Gallery关联gallery.setSelection(imageId.length/2);//选中中间的图片gallery.setOnItemSelectedListener(newOnItemSelectedListener(){@OverridepublicvoidonItemSelected(AdapterView<?>parent,Viewv,intposition,longid){//显示选中的图片imageSwitcher.setImageResource(imageId[position]);}@OverridepublicvoidonNothingSelected(AdapterView<?>arg0){}}}5.1高级组件运行结果如图5-10所示。5.2消息提示框与对话框使用Toast来显示消息提示框需要以下三个步骤:5.2.1 使用Toast显示消息提示框(1)创建一个Toast对象使用构造方式进行创建:Toasttoast=newToast(this);调用Toast类的makeText()方法创建:Toasttoast=Toast.makeText(this,"要显示的内容",Toast.LENGTH_SHORT);(2)调用Toast类提供的方法来设置该消息提示框的对齐方式、页边距、显示的内容等setDuration(intduration):用于设置消息提示框持续的时间,参数通常使用Toast.LENGTH_LONG或Toast.LENGTH_SHORT。setGravity(intgravity,intxOffset,intyOffset):用于设置消息提示框的位置,参数grivaty用于指定对齐方式,xOffset和yOffset用于指定具体的偏移值。setMargin(floathorizontalMargin,floatverticalMargin):用于设置消息提示的页边距。setText(CharSequences):用于设置要显示的文本内容。setView(Viewview):用于设置将要在提示框中显示的视图。(3)调用Toast类的show()方法显示消息提示框一定要调用show()方法,否则设置的消息提示框将不能显示。5.2消息提示框与对话框【例5-11】Toast类显示消息提示框使用示例。布局代码如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"android:id="@+id/layout1"android:gravity="center_horizontal"/></LinearLayout>5.2消息提示框与对话框Java代码如下:publicclassMainActivityextendsActivity{@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//通过makeText方法创建消息提示框Toast.makeText(MainActivity.this,"我是通过makeText方法创建的消息提示框",Toast.LENGTH_SHORT).show();//通过Toast类的构造方法创建消息提示框Toasttoast=newToast(this);toast.setDuration(Toast.LENGTH_SHORT);//设置持续时间toast.setGravity(Gravity.CENTER,0,0);//设置对齐方式LinearLayoutll=newLinearLayout(this);//创建一个线性布局管理器ImageViewimageView=newImageView(this);imageView.setPadding(0,0,5,0);ll.addView(imageView);TextViewtv=newTextView(this);tv.setText("我是通过构造方法创建的消息提示框");ll.addView(tv);toast.setView(ll);//设置消息提示框中要显示的视图toast.show();//显示消息提示框}}5.2消息提示框与对话框运行结果如图5-11所示。5.2消息提示框与对话框Notification代表的是具有全局效果的通知;NotificationManager用于发送Notification通知的系统服务。使用Notification和NotificationManager类发送和显示通知,大致可分为以下4个步骤:5.2.2 使用Notification在状态栏上显示通知调用getSystemService()方法获取系统的NotificationManager服务。(1)(2)(3)(4)创建一个Notification对象,并为其设置各种属性。为Notification对象设置事件信息。通过NotificationManager类的notify()方法发送Notification通知。5.2消息提示框与对话框【例5-12】使用Notification在状态栏上显示通知。布局代码如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><Buttonandroid:id="@+id/bt1"android:layout_height="wrap_content"android:layout_width="fill_parent"android:text="Notification测试"/><Buttonandroid:id="@+id/bt2"android:layout_height="wrap_content"android:layout_width="fill_parent"android:text="清除Notification"/></LinearLayout>5.2消息提示框与对话框Java代码如下:publicclassMainActivityextendsActivity{intnotification_id=19172439;NotificationManagernm;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);nm=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);Buttonbt1=(Button)findViewById(R.id.bt1);bt1.setOnClickListener(bt1lis);Buttonbt2=(Button)findViewById(R.id.bt2);bt2.setOnClickListener(bt2lis);}OnClickListenerbt1lis=newOnClickListener(){@OverridepublicvoidonClick(Viewv){showNotification(R.drawable.home,"图标边的文字","标题","内容");}};OnClickListenerbt2lis=newOnClickListener(){@OverridepublicvoidonClick(Viewv){showNotification(R.drawable.home,"图标边的文字","标题","内容");nm.cancel(notification_id);5.2消息提示框与对话框}};publicvoidshowNotification(inticon,Stringtickertext,Stringtitle,Stringcontent){//设置一个唯一的ID,随便设置//Notification管理器Notificationnotification=newNotification(icon,tickertext,System.currentTimeMillis());//后面的参数分别是显示在顶部通知栏的小图标,小图标旁的文字notification.defaults=Notification.DEFAULT_ALL;//这是设置通知是否同时播放声音或振动,声音为Notification.DEFAULT_SOUND//振动为Notification.DEFAULT_VIBRATE;//Light为Notification.DEFAULT_LIGHTS//全部为Notification.DEFAULT_ALL//如果是振动或者全部,必须在AndroidManifest.xml加入振动权限PendingIntentpt=PendingIntent.getActivity(this,0,newIntent(this,MainActivity.class),0);//单击通知后的动作,这里是转回main这个Acticitynm.notify(notification_id,notification);}}}5.2消息提示框与对话框运行结果如图5-12所示。5.2消息提示框与对话框(1)带确定、中立和取消等N
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物业管理与维修操作规范(标准版)
- 2025年企业财务报表分析与应用手册
- 财务报告编制与审查制度
- 办公室员工培训计划执行制度
- 办公室办公用品采购与审批制度
- 2026年重庆远达烟气治理特许经营有限公司科技分公司招聘备考题库及答案详解一套
- 2026年重庆一国企招聘11人备考题库完整参考答案详解
- 2026年达拉特旗工人文化宫招聘备考题库带答案详解
- 2026年集美区双岭小学产假顶岗教师招聘备考题库及答案详解参考
- 2026年西宁特殊钢股份有限公司招聘备考题库及参考答案详解1套
- 2025年煤矿安全规程新增变化条款考试题库及答案
- 2025年教师师德师风自查问题清单及整改措施范文
- 2026年广东农垦火星农场有限公司公开招聘作业区管理人员备考题库及参考答案详解
- 肿瘤化疗导致的中性粒细胞减少诊治中国专家共识解读
- 2025年查对制度考核考试题库(答案+解析)
- DL-T5796-2019水电工程边坡安全监测技术规范
- 燃机三菱控制系统简述课件
- 全尺寸测量报告FAI
- 稽核管理培训课件
- 临时电箱日常巡查记录表
- pep人教版六年级英语上册《Recycle2》教案教学设计
评论
0/150
提交评论