版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
主講教師:日期:第5章用戶界面設(shè)計(jì)Android程序設(shè)計(jì)目錄/CONTENTS5.1高級(jí)組件5.2消息提示框與對(duì)話框1.了解常用的對(duì)話框。2.熟練使用常用的高級(jí)組件。3.掌握應(yīng)用消息提示框的使用方法。學(xué)習(xí)目標(biāo)4.掌握常用對(duì)話框的使用方法。5.1高級(jí)組件5.1.1?自動(dòng)完成文本框自動(dòng)完成文本框(AutoCompleteTextView)比普通編輯框添加了一個(gè)功能:當(dāng)用戶輸入一定字符后,自動(dòng)完成文本框會(huì)顯示一個(gè)下拉菜單,供用戶從中選擇,當(dāng)用戶選擇了某個(gè)菜單項(xiàng)后,自動(dòng)完成文本框就會(huì)按用戶選擇自動(dòng)填寫該文本框。5.1高級(jí)組件【例5-1】實(shí)現(xiàn)一個(gè)帶自動(dòng)提示功能的搜索框。布局代碼如下:<?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="請(qǐng)輸入課程"android:singleLine="true"/></LinearLayout>5.1高級(jí)組件Java代碼如下:publicclassMainActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);MultiAutoCompleteTextViewmact=(MultiAutoCompleteTextView)findViewById(R.id.main_mact);Stringarray[]={"Android講義","Android瘋狂講義","Android項(xiàng)目實(shí)戰(zhàn)","Android開發(fā)案例教程","Android網(wǎng)絡(luò)開發(fā)","Android開發(fā)基礎(chǔ)"};ArrayAdapter<String>adapter=newArrayAdapter<String>(this,android.R.layout.simple_list_item_1,array);mact.setTokenizer(newMultiAutoCompleteTextView.CommaTokenizer());mact.setAdapter(adapter);}}5.1高級(jí)組件運(yùn)行結(jié)果如圖5-1所示。5.1高級(jí)組件5.1.2?進(jìn)度條進(jìn)度條(ProgressBar)是UI界面中一種實(shí)用的UI組件。它用于顯示一個(gè)耗時(shí)操作的百分比。Andriod支持多種風(fēng)格的進(jìn)度條,可以通過style屬性為ProgressBar指定風(fēng)格,該屬性支持如下幾種屬性值:@android:style/Widget.ProgressBar.Horizontal:水平進(jìn)度條。@android:style/Widget.ProgressBar.Inverse:細(xì)的、順時(shí)針旋轉(zhuǎn)的中等圓形普通進(jìn)度條。@android:style/Widget.ProgressBar.Large:粗的、順時(shí)針旋轉(zhuǎn)的大圓形進(jìn)度條。@android:style/Widget.ProgressBar.Large.Inverse:粗的、順時(shí)針旋轉(zhuǎn)的大圓形普通進(jìn)度條。@android:style/Widget.ProgressBar.Small:細(xì)的、順時(shí)針旋轉(zhuǎn)的小圓形進(jìn)度條。@android:style/Widget.ProgressBar.Small.Inverse:細(xì)的、順時(shí)針旋轉(zhuǎn)的小圓形普通進(jìn)度條。5.1高級(jí)組件5.1高級(jí)組件【例5-2】水平進(jìn)度條的用法示例。<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutandroid:orientation="vertical"android:layout_height="match_parent"android:layout_width="match_parent"xmlns:android="/apk/res/android"><!--水平進(jìn)度條--><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"/><!--圓形進(jìn)度條--><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高級(jí)組件Java代碼如下:publicclassMainActivityextendsActivity{privateProgressBarhorizonP;//水平進(jìn)度條privateProgressBarcircleP;//圓形進(jìn)度條privateintmProgressStatus=0;//完成進(jìn)度privateHandlermHandler;//用于處理消息的Handler類的對(duì)象@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//獲取水平進(jìn)度條和圓形進(jìn)度條horizonP=(ProgressBar)findViewById(R.gressBar1);circleP=(ProgressBar)findViewById(R.gressBar2);//通過匿名內(nèi)部類實(shí)例化處理消息的Handler類的對(duì)象,//并重寫handleMessage()方法,實(shí)現(xiàn)耗時(shí)操作沒有完成時(shí)更新進(jìn)度條mHandler=newHandler(){@OverridepublicvoidhandleMessage(Messagemsg){if(msg.what==0x111){horizonP.setProgress(mProgressStatus);//更新進(jìn)度}else{Toast.makeText(MainActivity.this,"耗時(shí)操作已完成",Toast.LENGTH_SHORT).show();//設(shè)置進(jìn)度條不顯示,并且不占用空間horizonP.setVisibility(View.GONE);//設(shè)置進(jìn)度條不顯示,并且不占用空間circleP.setVisibility(View.GONE);}5.1高級(jí)組件}};//開啟一個(gè)線程,用于模擬耗時(shí)操作,在線程中,調(diào)用setMessage()發(fā)送處理消息newThread(newRunnable(){@Overridepublicvoidrun(){while(true){mProgressStatus=doWork();//獲取耗時(shí)操作完成的百分比Messagem=newMessage();if(mProgressStatus<100){m.what=0x111;mHandler.sendMessage(m);//發(fā)送消息}else{m.what=0x110;mHandler.sendMessage(m);//發(fā)送消息break;}}}//模擬一個(gè)耗時(shí)操作privateintdoWork(){mProgressStatus+=Math.random()*10;//改變完成進(jìn)度try{Thread.sleep(200);//線程休眠200毫秒}catch(InterruptedExceptione){e.printStackTrace();}returnmProgressStatus;//返回新的進(jìn)度}}).start();//開啟線程}}5.1高級(jí)組件運(yùn)行結(jié)果如圖5-2所示。5.1高級(jí)組件5.1.3?拖動(dòng)條和星級(jí)評(píng)分條拖動(dòng)條(SeekBar)用于對(duì)Android系統(tǒng)中的某項(xiàng)數(shù)值進(jìn)行調(diào)節(jié),如音量、亮度等。在開發(fā)中,程序員可通過設(shè)置android:thumb屬性來改變滑塊外觀(需要指定一個(gè)Drawable對(duì)象,將該對(duì)象作為自定義滑塊)。為了讓程序能夠響應(yīng)拖動(dòng)條滑塊位置的改變,我們可以為它綁定一個(gè)監(jiān)聽器(OnSeekBarChangeListener)。5.1高級(jí)組件【例5-3】在屏幕上顯示拖動(dòng)條。布局代碼如下:<?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="進(jìn)度: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高級(jí)組件Java代碼如下:publicclassMainActivityextendsActivity{privateSeekBarseekBar;//拖動(dòng)條@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//獲取文本視圖finalTextViewresult=(TextView)findViewById(R.id.textView1);//獲取拖動(dòng)條,并添加事件監(jiān)聽器seekBar=(SeekBar)findViewById(R.id.seekBar1);seekBar.setOnSeekBarChangeListener(newOnSeekBarChangeListener(){@OverridepublicvoidonProgressChanged(SeekBararg0,intarg1,booleanarg2){result.setText("當(dāng)前值:"+arg1);}@OverridepublicvoidonStartTrackingTouch(SeekBararg0){Toast.makeText(MainActivity.this,"開始滑動(dòng)",Toast.LENGTH_SHORT).show();}@OverridepublicvoidonStopTrackingTouch(SeekBararg0){Toast.makeText(MainActivity.this,"結(jié)束滑動(dòng)",Toast.LENGTH_SHORT).show();}});}}5.1高級(jí)組件運(yùn)行結(jié)果如圖5-3所示。5.1高級(jí)組件星級(jí)評(píng)分條表示對(duì)某一事物或應(yīng)用的支持、評(píng)價(jià),或?qū)δ撤N應(yīng)用服務(wù)的滿意程度等。在開發(fā)星級(jí)評(píng)分條時(shí),程序員可以直接通過拖動(dòng)星星圖案來改變進(jìn)度。5.1高級(jí)組件【例5-4】在屏幕上顯示星級(jí)評(píng)分條。布局代碼如下:<?xmlversion="1.0"?><LinearLayoutandroid:orientation="vertical"android:layout_height="match_parent"android:layout_width="match_parent"xmlns:android="/apk/res/android"><!--星級(jí)評(píng)分條--><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高級(jí)組件Java代碼如下:publicclassMainActivityextendsActivity{privateRatingBarratingBar;//星級(jí)評(píng)分條@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//獲取星級(jí)評(píng)分條ratingBar=(RatingBar)findViewById(R.id.ratingBar1);//獲取按鈕,并添加單擊事件監(jiān)聽器Buttonbutton=(Button)findViewById(R.id.button1);button.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewarg0){intresult=ratingBar.getProgress();//獲取進(jìn)度floatrating=ratingBar.getRating();//獲取等級(jí)floatstep=ratingBar.getStepSize();//獲取每次最少改變多少顆星Log.i("星級(jí)評(píng)分條","step="+step+"result="+result+"rating="+rating);Toast.makeText(MainActivity.this,"獲得了"+rating+"顆星",Toast.LENGTH_SHORT).show();}});}}5.1高級(jí)組件運(yùn)行結(jié)果如圖5-4所示。5.1高級(jí)組件5.1.4?選項(xiàng)卡選項(xiàng)卡(TabHost)的主要功能是進(jìn)行分類管理。創(chuàng)建選項(xiàng)卡newTabSpec(Stringtag)創(chuàng)建選項(xiàng)卡addTab(TabHost.TabSpectabSpec)添加選項(xiàng)卡選項(xiàng)卡的實(shí)現(xiàn)步驟(1)在布局代碼中添加所需的TabHost、TabWidget和FrameLayout組件。(2)編寫各標(biāo)簽頁所對(duì)應(yīng)的XML布局代碼。(3)在Activity中,獲取并初始化TabHost組件。(4)為TabHost對(duì)象添加標(biāo)簽頁。5.1高級(jí)組件【例5-5】顯示本地音樂和網(wǎng)絡(luò)音樂選項(xiàng)卡。布局代碼如下:<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高級(jí)組件<FrameLayoutandroid:id="@android:id/tabcontent"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_above="@android:id/tabs"><!--第一個(gè)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="第一個(gè)tab的布局"/></LinearLayout><!--第二個(gè)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="第二個(gè)tab的布局"/></LinearLayout></FrameLayout></LinearLay5.1高級(jí)組件Java代碼如下:publicclassMainActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TabHosttab=(TabHost)findViewById(android.R.id.tabhost);//初始化TabHost容器tab.setup();//在TabHost創(chuàng)建標(biāo)簽,然后設(shè)置:標(biāo)題/圖標(biāo)/標(biāo)簽頁布局tab.addTab(tab.newTabSpec("tab1").setIndicator("本地音樂",null).setContent(R.id.tab1));tab.addTab(tab.newTabSpec("tab2").setIndicator("網(wǎng)絡(luò)音樂",null).setContent(R.id.tab2));}}5.1高級(jí)組件運(yùn)行結(jié)果如圖5-5所示。5.1高級(jí)組件5.1.5?圖像切換器Android圖像切換器(ImageSwitch)是一種能夠?qū)崿F(xiàn)圖像序列播放的組件,類似于用Windows照片查看器單擊左右按鈕實(shí)現(xiàn)按順序查看照片的功能。ImageSwitch繼承了ViewSwitch,重寫了ViewSwitch的showNext()、showprevious()兩個(gè)方法。ImageSwitch提供了一個(gè)ViewFactory接口,ViewFactory生成的View組件必須是ImageView。進(jìn)行圖片切換時(shí),只要調(diào)用setImageResource(intresid)方法更換圖片即可。5.1高級(jí)組件【例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="我是當(dāng)前圖片的信息~"android:textSize="24dp"/><LinearLayoutandroid:layout_width="match_parent"5.1高級(jí)組件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高級(jí)組件Java代碼如下:publicclassMainActivityextendsActivity{//成員變量1:保存要顯示的圖片id的數(shù)組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高級(jí)組件//為獲取到的控件添加顯示效果:淡入動(dòng)畫和淡出動(dòng)畫image.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));image.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));//為圖像切換器設(shè)置一個(gè)ViewFactory,并重寫makeView方法image.setFactory(newViewFactory(){@OverridepublicViewmakeView(){//指定視圖切換工程returnnewImageView(MainActivity.this);}});image.setImageResource(images[index]);show.setText("一共有"+images.length+"張圖片,當(dāng)前是第"+(index+1)+"張圖片");//當(dāng)單擊按鈕時(shí),圖像切換并顯示相應(yīng)的信息up.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewarg0){if(index>0)index--;elseindex=images.length-1;image.setImageResource(images[index]);show.setText("一共有"+images.length+"張圖片,當(dāng)前是第"+(index+1)+"張圖片");}});//同理,當(dāng)單擊按鈕時(shí),圖像切換并顯示相應(yīng)的信息dowm.setOnClickListener(newOnClickListener(){publicvoidonClick(Viewarg0){if(index<images.length-1)index++;elseindex=0;image.setImageResource(images[index]);show.setText("一共有"+images.length+"張圖片,當(dāng)前是第"+(index+1)+"張圖片");}});}5.1高級(jí)組件運(yùn)行結(jié)果如圖5-6所示。5.1高級(jí)組件5.1.6?網(wǎng)格視圖網(wǎng)格視圖(GridView)是Android常用的規(guī)劃容器,視圖自身分為有行列的矩陣,用單元格放置自己的組件和內(nèi)容,通常是放圖片和文字。網(wǎng)格視圖和列表視圖有著共同的父類AbsListView,區(qū)別在于ListView顯示的是一個(gè)列,而GridView可以控制列的數(shù)目。數(shù)據(jù)配置方面,GridView和ListView類似,都要通過適配器進(jìn)行數(shù)據(jù)配置。5.1高級(jí)組件【例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高級(jí)組件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);//建立數(shù)據(jù)源,設(shè)置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高級(jí)組件運(yùn)行結(jié)果如圖5-7所示。5.1高級(jí)組件5.1.7?畫廊視圖畫廊(Gallery)能夠按水平方向顯示內(nèi)容,并且用戶可用手指直接拖動(dòng)圖片。畫廊一般用來瀏覽圖片,被選中的選項(xiàng)位于中間,并且可用影響事件顯示信息。在使用畫廊視圖時(shí),應(yīng)首先在屏幕上添加Gallery組件。使用畫廊視圖,也需要使用Adapter顯示的數(shù)據(jù)。通常使用BaseAdapter類為Gallery組件提供數(shù)據(jù)。5.1高級(jí)組件【例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高級(jí)組件Java代碼如下:publicclassMainActivityextendsActivity{//數(shù)據(jù)源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){//創(chuàng)建一個(gè)ImageViewImageViewimageView=newImageView(MainActivity.this);imageView.setImageResource(imageIds[position]);//設(shè)置ImageView的縮放類型imageView.setScaleType(ImageView.ScaleType.FIT_XY);//為imageView設(shè)置布局參數(shù)imageView.setLayoutParams(newGallery.LayoutParams(75,90));TypedArraytypedArray=obtainStyledAttributes(R.styleable.Gallery);returnimageView;}5.1高級(jí)組件@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高級(jí)組件運(yùn)行結(jié)果如圖5-8所示。5.1高級(jí)組件直接由Activity的方法啟用。要在窗口上顯示進(jìn)度條,需要經(jīng)過如下步驟:(1)調(diào)用Activity的requestWindowFeature()方法,該方法根據(jù)傳入的參數(shù)可啟用特定的窗口特征,例如傳入Window.FEATURE_INDETERMINATE_PROGRESS在窗口標(biāo)題上顯示不帶進(jìn)度的進(jìn)度條;傳入Window.FEATURE_PROGRESS則顯示帶進(jìn)度的進(jìn)度條。(2)調(diào)用Activity的setProgressBarVisibility(boolean)或setProgressBarIndeterminateVisibility(boolean)方法即可控制進(jìn)度條的顯示和隱藏。5.1.8?顯示在標(biāo)題上的進(jìn)度條5.1高級(jí)組件【例5-9】在標(biāo)題上顯示進(jìn)度條。布局代碼如下:<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高級(jí)組件Java代碼如下:publicclassMainActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);//以下兩句代碼必須寫在setContentView之前,否則不起作用requestWindowFeature(Window.FEATURE_PROGRESS);//進(jìn)度指示器功能requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);setContentView(R.layout.activity_main);Buttonbtn1=(Button)findViewById(R.id.btn1);Buttonbtn2=(Button)findViewById(R.id.btn2);//展示標(biāo)題欄進(jìn)度條btn1.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){setProgressBarVisibility(true);setProgressBarIndeterminateVisibility(true);}});//隱藏標(biāo)題欄進(jìn)度條btn2.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){setProgressBarVisibility(false);setProgressBarIndeterminateVisibility(false);}});}5.1高級(jí)組件運(yùn)行結(jié)果如圖5-9所示。5.1高級(jí)組件Android幻燈片式的圖片瀏覽器里面用到了畫廊視圖Gallery和圖像切換器ImageSwitcher兩個(gè)類。其中畫廊視圖能夠按水平方向顯示內(nèi)容,并且用戶可用手指直接拖動(dòng)圖片,一般用來瀏覽圖片,被選中的選項(xiàng)位于中間,并且可以響應(yīng)事件顯示信息。在使用畫廊視圖時(shí),應(yīng)首先在屏幕上添加Gallery組件,通常在XML布局代碼中添加。5.1.9?幻燈片式圖片瀏覽器5.1高級(jí)組件【例5-10】應(yīng)用畫廊視圖和圖像切換器實(shí)現(xiàn)幻燈片式圖片瀏覽器。布局代碼如下:<?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高級(jí)組件Java代碼如下:publicclassMainActivityextendsActivity{//定義并初始化保存圖片id的數(shù)組privateint[]imageId=newint[]{R.drawable.flower01,R.drawable.flower02,R.drawable.flower03,R.drawable.flower04,R.drawable.flower05,R.drawable.flower06};//聲明一個(gè)圖像切換器對(duì)象privateImageSwitcherimageSwitcher;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//獲取gallery組件Gallerygallery=(Gallery)findViewById(R.id.gallery1);//獲取圖像切換器imageSwitcher=(ImageSwitcher)findViewById(R.id.imageSwitcher);//設(shè)置動(dòng)畫效果imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));//設(shè)置淡入動(dòng)畫imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));//設(shè)置淡出動(dòng)畫imageSwitcher.setFactory(newViewFactory(){@OverridepublicViewmakeView(){//實(shí)例化一個(gè)imageView類的對(duì)象ImageViewimageView=newImageView(MainActivity.this);//設(shè)置保持縱橫比居中縮放圖像imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);imageView.setLayoutParams(newImageSwitcher.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));returnimageView;//返回imageView對(duì)象}});BaseAdapteradapter=newBaseAdapter(){@OverridepublicViewgetView(intposition,Viewview,ViewGroupparent){ImageViewimageView;//聲明ImageView的對(duì)象if(convertView==null){//實(shí)例化ImageView的對(duì)象imageView=newImageView(MainActivity.this);//設(shè)置縮放方式imageView.setScaleType(ImageView.ScaleType.FIT_XY);imageView.setLayoutParams(newGallery.LayoutParams(180,135));imageView.setPadding(5,0,5,0);//設(shè)置imageView的內(nèi)邊距}else{imageView=(ImageView)convertView;}//為imageView設(shè)置要顯示的圖片imageView.setImageResource(imageId[position]);5.1高級(jí)組件returnimageView;//返回ImageView}//功能:獲得當(dāng)前選項(xiàng)的id@OverridepubliclonggetItemId(intposition){returnposition;}//功能:獲得當(dāng)前選項(xiàng)@OverridepublicObjectgetItem(intposition){returnposition;}//獲得數(shù)量@OverridepublicintgetCount(){returnimageId.length;}};gallery.setAdapter(adapter);//將適配器與Gallery關(guān)聯(lián)gallery.setSelection(imageId.length/2);//選中中間的圖片gallery.setOnItemSelectedListener(newOnItemSelectedListener(){@OverridepublicvoidonItemSelected(AdapterView<?>parent,Viewv,intposition,longid){//顯示選中的圖片imageSwitcher.setImageResource(imageId[position]);}@OverridepublicvoidonNothingSelected(AdapterView<?>arg0){}}}5.1高級(jí)組件運(yùn)行結(jié)果如圖5-10所示。5.2消息提示框與對(duì)話框使用Toast來顯示消息提示框需要以下三個(gè)步驟:5.2.1?使用Toast顯示消息提示框(1)創(chuàng)建一個(gè)Toast對(duì)象使用構(gòu)造方式進(jìn)行創(chuàng)建:Toasttoast=newToast(this);調(diào)用Toast類的makeText()方法創(chuàng)建:Toasttoast=Toast.makeText(this,"要顯示的內(nèi)容",Toast.LENGTH_SHORT);(2)調(diào)用Toast類提供的方法來設(shè)置該消息提示框的對(duì)齊方式、頁邊距、顯示的內(nèi)容等setDuration(intduration):用于設(shè)置消息提示框持續(xù)的時(shí)間,參數(shù)通常使用Toast.LENGTH_LONG或Toast.LENGTH_SHORT。setGravity(intgravity,intxOffset,intyOffset):用于設(shè)置消息提示框的位置,參數(shù)grivaty用于指定對(duì)齊方式,xOffset和yOffset用于指定具體的偏移值。setMargin(floathorizontalMargin,floatverticalMargin):用于設(shè)置消息提示的頁邊距。setText(CharSequences):用于設(shè)置要顯示的文本內(nèi)容。setView(Viewview):用于設(shè)置將要在提示框中顯示的視圖。(3)調(diào)用Toast類的show()方法顯示消息提示框一定要調(diào)用show()方法,否則設(shè)置的消息提示框?qū)⒉荒茱@示。5.2消息提示框與對(duì)話框【例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消息提示框與對(duì)話框Java代碼如下:publicclassMainActivityextendsActivity{@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//通過makeText方法創(chuàng)建消息提示框Toast.makeText(MainActivity.this,"我是通過makeText方法創(chuàng)建的消息提示框",Toast.LENGTH_SHORT).show();//通過Toast類的構(gòu)造方法創(chuàng)建消息提示框Toasttoast=newToast(this);toast.setDuration(Toast.LENGTH_SHORT);//設(shè)置持續(xù)時(shí)間toast.setGravity(Gravity.CENTER,0,0);//設(shè)置對(duì)齊方式LinearLayoutll=newLinearLayout(this);//創(chuàng)建一個(gè)線性布局管理器ImageViewimageView=newImageView(this);imageView.setPadding(0,0,5,0);ll.addView(imageView);TextViewtv=newTextView(this);tv.setText("我是通過構(gòu)造方法創(chuàng)建的消息提示框");ll.addView(tv);toast.setView(ll);//設(shè)置消息提示框中要顯示的視圖toast.show();//顯示消息提示框}}5.2消息提示框與對(duì)話框運(yùn)行結(jié)果如圖5-11所示。5.2消息提示框與對(duì)話框Notification代表的是具有全局效果的通知;NotificationManager用于發(fā)送Notification通知的系統(tǒng)服務(wù)。使用Notification和NotificationManager類發(fā)送和顯示通知,大致可分為以下4個(gè)步驟:5.2.2?使用Notification在狀態(tài)欄上顯示通知調(diào)用getSystemService()方法獲取系統(tǒng)的NotificationManager服務(wù)。(1)(2)(3)(4)創(chuàng)建一個(gè)Notification對(duì)象,并為其設(shè)置各種屬性。為Notification對(duì)象設(shè)置事件信息。通過NotificationManager類的notify()方法發(fā)送Notification通知。5.2消息提示框與對(duì)話框【例5-12】使用Notification在狀態(tài)欄上顯示通知。布局代碼如下:<?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測(cè)試"/><Buttonandroid:id="@+id/bt2"android:layout_height="wrap_content"android:layout_width="fill_parent"android:text="清除Notification"/></LinearLayout>5.2消息提示框與對(duì)話框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,"圖標(biāo)邊的文字","標(biāo)題","內(nèi)容");}};OnClickListenerbt2lis=newOnClickListener(){@OverridepublicvoidonClick(Viewv){showNotification(R.drawable.home,"圖標(biāo)邊的文字","標(biāo)題","內(nèi)容");nm.cancel(notification_id);5.2消息提示框與對(duì)話框}};publicvoidshowNotification(inticon,Stringtickertext,Stringtitle,Stringcontent){//設(shè)置一個(gè)唯一的ID,隨便設(shè)置//Notification管理器Notificationnotification=newNotification(icon,tickertext,System.currentTimeMillis());//后面的參數(shù)分別是顯示在頂部通知欄的小圖標(biāo),小圖標(biāo)旁的文字notification.defaults=Notification.DEFAULT_ALL;//這是設(shè)置通知是否同時(shí)播放聲音或振動(dòng),聲音為Notification.DEFAULT_SOUND//振動(dòng)為Notification.DEFAULT_VIBRATE;//Light為Notification.DEFAULT_LIGHTS//全部為Notification.DEFAULT_ALL//如果是振動(dòng)或者全部,必須在AndroidManifest.xml加入振動(dòng)權(quán)限PendingIntentpt=PendingIntent.getActivity(this,0,newIntent(this,MainActivity.class),0);//單擊通知后的動(dòng)作,這里是轉(zhuǎn)回main這個(gè)Acticitynm.notify(notification_id,notification);}}}5.2消息提示框與對(duì)話框運(yùn)行結(jié)果如圖5-12所示。5.2消息提示框與對(duì)話框(1)帶確定、中立和取消等N
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物業(yè)管理與維修操作規(guī)范(標(biāo)準(zhǔn)版)
- 2025年企業(yè)財(cái)務(wù)報(bào)表分析與應(yīng)用手冊(cè)
- 財(cái)務(wù)報(bào)告編制與審查制度
- 辦公室員工培訓(xùn)計(jì)劃執(zhí)行制度
- 辦公室辦公用品采購與審批制度
- 2026年重慶遠(yuǎn)達(dá)煙氣治理特許經(jīng)營(yíng)有限公司科技分公司招聘?jìng)淇碱}庫及答案詳解一套
- 2026年重慶一國企招聘11人備考題庫完整參考答案詳解
- 2026年達(dá)拉特旗工人文化宮招聘?jìng)淇碱}庫帶答案詳解
- 2026年集美區(qū)雙嶺小學(xué)產(chǎn)假頂崗教師招聘?jìng)淇碱}庫及答案詳解參考
- 2026年西寧特殊鋼股份有限公司招聘?jìng)淇碱}庫及參考答案詳解1套
- 2025年煤礦安全規(guī)程新增變化條款考試題庫及答案
- 2025年教師師德師風(fēng)自查問題清單及整改措施范文
- 2026年廣東農(nóng)墾火星農(nóng)場(chǎng)有限公司公開招聘作業(yè)區(qū)管理人員備考題庫及參考答案詳解
- 腫瘤化療導(dǎo)致的中性粒細(xì)胞減少診治中國專家共識(shí)解讀
- 2025年查對(duì)制度考核考試題庫(答案+解析)
- 云南省2025年普通高中學(xué)業(yè)水平合格性考試歷史試題
- 養(yǎng)老護(hù)理服務(wù)的法律監(jiān)管與執(zhí)法
- DL-T5796-2019水電工程邊坡安全監(jiān)測(cè)技術(shù)規(guī)范
- 臨時(shí)電箱日常巡查記錄表
- pep人教版六年級(jí)英語上冊(cè)《Recycle2》教案教學(xué)設(shè)計(jì)
- 公民戶口遷移審批表
評(píng)論
0/150
提交評(píng)論