一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

【android基礎(chǔ)學(xué)習(xí)之五】——基礎(chǔ)控件Menu,Dialog,ImageView,ImageButton

 windli筆記 2011-12-20

一、    按鈕(Button)

按鈕控件已經(jīng)在之前的例子學(xué)習(xí)中使用到,主要的是一個(gè)setOnClickListener事件。

 

二、    菜單(Menu)

         一般 Android手機(jī)都有menu這個(gè)按鍵來顯示相應(yīng)的菜單,實(shí)現(xiàn)菜單效果,需要通過onCreateOptionsMenu來實(shí)現(xiàn),然后對(duì)其事件進(jìn)行相關(guān)的監(jiān)聽來實(shí)現(xiàn)不同任務(wù),可以通過兩種方式來實(shí)現(xiàn):

1.       通過XML布局實(shí)現(xiàn);

2.       通過Menu.add方法實(shí)現(xiàn)

 

實(shí)例分析:通過上面兩種方式來實(shí)現(xiàn)菜單效果,main.xml使用XML布局方式實(shí)現(xiàn),main2.xml使用Menu.add方法實(shí)現(xiàn)。

1.       通過XML布局:

首先需要在res目錄下建立menu文件夾,并且在該目錄下建立menu.xml文件,在該文件中創(chuàng)建需要的菜單。

  1. <menu xmlns:android="http://schemas./apk/res/android">  
  2.     <item android:id="@+id/about" android:title="關(guān)于"/>  
  3.     <item android:id="@+id/exit" android:title="退出"/>  
  4. </menu>  


然后對(duì)應(yīng)的Activity01重寫onCreateOptionsMenu方法來裝載這個(gè)menu文件

  1. //創(chuàng)建menu   
  2.     public boolean onCreateOptionsMenu(Menu menu) {  
  3.         MenuInflater inflater = this.getMenuInflater();  
  4.         //設(shè)置menu界面為res/menu/menu.xml   
  5.         inflater.inflate(R.menu.menu, menu);      
  6.         return true;  
  7. }  

最后可以加上對(duì)菜單按鈕事件的監(jiān)聽

  1. //處理菜單事件   
  2.     public boolean onOptionsItemSelected(MenuItem item) {  
  3.         // TODO Auto-generated method stub   
  4.         //得到當(dāng)前選中得MenuItem的ID   
  5.         int item_id = item.getItemId();  
  6.           
  7.         switch(item_id){  
  8.         case R.id.about:  
  9.             //新建一個(gè)Intent對(duì)象,Intent的使用參考   
  10.             Intent intent = new Intent();  
  11.             //指定intent要啟動(dòng)的類   
  12.             intent.setClass(Examples_04_13Activity.this, Examples_04_13Activity02.class);  
  13.             //啟動(dòng)一個(gè)新的Activity   
  14.             startActivity(intent);  
  15.             //關(guān)閉當(dāng)前的Activity   
  16.             Examples_04_13Activity.this.finish();  
  17.             break;  
  18.         case R.id.exit:  
  19.             Examples_04_13Activity.this.finish();  
  20.             break;  
  21.         }  
  22.         return true;  
  23. }  

【擴(kuò)展點(diǎn)】:關(guān)于Intent的理解與使用

    Intent 是一個(gè)將要執(zhí)行的動(dòng)作的抽象的描述,一般來說是作為參數(shù)來使用,由Intent來協(xié)助完成android各個(gè)組件之間的通訊。比如說調(diào)用startActivity()來啟動(dòng)一個(gè)activity,或者由broadcaseIntent()來傳遞給所有感興趣的BroadcaseReceiver, 再或者由startService()/bindservice()來啟動(dòng)一個(gè)后臺(tái)的service.所以可以看出來,intent主要是用來啟動(dòng)其他的activity 或者service,所以可以將intent理解成activity之間的粘合劑。

可以參考該文章http://wenku.baidu.com/view/76db47858762caaedd33d452.html

2       通過Menu.add方法:

即在onCreateOptionsMenu方法中通過menu.add方法進(jìn)行添加,如;

  1. public boolean onCreateOptionsMenu(Menu menu) {  
  2.         //為menu添加內(nèi)容   
  3.         menu.add(000,  R.string.ok);  
  4.         menu.add(001,  R.string.back);  
  5.         return true;  
  6. }  

實(shí)例效果:左圖為第一種實(shí)現(xiàn)方式,右圖為第二種實(shí)現(xiàn)方式

 

三、    對(duì)話框(Dialog)

實(shí)現(xiàn)對(duì)話框效果,主要是使用AlertDialog.Builder類,還可以自定義對(duì)話框。

實(shí)例關(guān)鍵源碼分析:

  1. Dialog dialog = new AlertDialog.Builder(Examples_04_14Activity.this)  
  2.         .setTitle("登陸提示")//設(shè)置標(biāo)題   
  3.         .setMessage("這里需要登陸!")//設(shè)置內(nèi)容   
  4.         .setPositiveButton("確定"//設(shè)置確定按鈕   
  5.                 new DialogInterface.OnClickListener() {  
  6.                 public void onClick(DialogInterface dialog, int which) {  
  7.                         // TODO Auto-generated method stub   
  8.                         //點(diǎn)擊確定轉(zhuǎn)向登陸框   
  9.                         LayoutInflater factory = LayoutInflater.from(Examples_04_14Activity.this);  
  10.                         //得到自定義對(duì)話框   
  11.                         final View DialogView = factory.inflate(R.layout.dialog, null);  
  12.                           
  13.                         AlertDialog dlg = new AlertDialog.Builder(Examples_04_14Activity.this)  
  14.                         .setTitle("登陸框")  
  15.                         .setView(DialogView)//設(shè)置自定義對(duì)話框的樣式   
  16.                         .setPositiveButton("確定"//設(shè)置"確定"按鈕   
  17.                                 new DialogInterface.OnClickListener(){ //設(shè)置事件監(jiān)聽   
  18.                                 public void onClick(DialogInterface dialog, int whichButton) {  
  19.                                     //輸入完成后,點(diǎn)擊“確定”開始登陸   
  20.                                     m_Dialog = ProgressDialog.show(Examples_04_14Activity.this,  
  21.                                             "請(qǐng)等待...""正在為你登錄...",true);  
  22.                                       
  23.                                     new Thread(){   
  24.                                       public void run(){   
  25.                                         try{   
  26.                                           sleep(3000);  
  27.                                         }catch (Exception e){  
  28.                                           e.printStackTrace();  
  29.                                         }  
  30.                                         finally{  
  31.                                             //登錄結(jié)束,取消m_Dialog對(duì)話框   
  32.                                             m_Dialog.dismiss();  
  33.                                         }  
  34.                                       }  
  35.                                 }.start();   
  36.                             }  
  37.                         })  
  38.                         .setNegativeButton("取消"//設(shè)置“取消”按鈕   
  39.                                 new DialogInterface.OnClickListener() {  
  40.                                 public void onClick(DialogInterface dialog, int whichButton){  
  41.                                     //點(diǎn)擊"取消"按鈕之后退出程序   
  42.                                     Examples_04_14Activity.this.finish();  
  43.                                 }  
  44.                         })  
  45.                         .create();//創(chuàng)建   
  46.                         dlg.show();//顯示   
  47.                     }  
  48.                 })  
  49.         .setNeutralButton("退出",   
  50.             new DialogInterface.OnClickListener() {  
  51.                 public void onClick(DialogInterface dialog, int whichButton){  
  52.                     //點(diǎn)擊"退出"按鈕之后推出程序   
  53.                     Examples_04_14Activity.this.finish();  
  54.                 }  
  55.             })  
  56.         .create();//創(chuàng)建按鈕   
  57.         // 顯示對(duì)話框   
  58.         dialog.show();  

【擴(kuò)展點(diǎn)】

1.  LayoutInflater factory = LayoutInflater.from(Activity01.this);

Inflater英文意思是膨脹。 LayoutInflater的作用類似于 findViewById(),不同點(diǎn)是LayoutInflater是用來找layout文件夾下的xml布局文件,并且實(shí)例化!而 findViewById()是找具體某一個(gè)xml下的具體 widget控件(如:Button,TextView等)。

補(bǔ)充總結(jié):

(1).一般來講,我們用LayoutInflater做一件事:inflate。inflate這個(gè)方法總共有四種形式,目的都是把xml表述的layout轉(zhuǎn)化為View。

(2).獲得LayoutInflater的方法三種:

  1. LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  2. View layout = inflater.inflate(R.layout.main, null);  
  3.   
  4. LayoutInflater inflater = LayoutInflater.from(context); (該方法實(shí)質(zhì)就是第一種方法,可參考源代碼)  
  5. View layout = inflater.inflate(R.layout.main, null);  
  6.   
  7. LayoutInflater inflater = getLayoutInflater();(在Activity中可以使用,實(shí)際上是View子類下window的一個(gè)函數(shù))  
  8. View layout = inflater.inflate(R.layout.main, null);  

(3)setContentView和inflate的區(qū)別:

  1. public class MyInflate extends Activity{  
  2.     private TextView tv;  
  3.     public void OnCreate(Bundle savedInstanceState){  
  4.         super.onCreate(savedInstanceState);  
  5.         //setContentView(R.layout.main);   
  6.         //tv = (TextView) findViewById(R.id.tv);   
  7.   
  8.         LayoutInflater inflate = LayoutInflater.from(this);  
  9.         View view = inflate.inflate(R.layout.main,null);  
  10.         setContentView(view);  
  11.     }  
  12. }  

 

上述注釋掉的代碼和沒有注釋掉的代碼兩種情況是相同的。

區(qū)別:
setContentView()一旦調(diào)用, layout就會(huì)立刻顯示UI;而inflate只會(huì)把Layout形成一個(gè)以view類實(shí)現(xiàn)成的對(duì)象,有需要時(shí)再用setContentView(view)顯示出來。一般在activity中通過setContentView()將界面顯示出來,但是如果在非activity中如何對(duì)控件布局設(shè)置操作了,這就需要LayoutInflater動(dòng)態(tài)加載。

public View inflate(int Resourece,ViewGroup root)
作用:填充一個(gè)新的視圖層次結(jié)構(gòu)從指定的XML資源文件中
reSource:View的layout的ID
root: 生成的層次結(jié)構(gòu)的根視圖
return 填充的層次結(jié)構(gòu)的根視圖。如果參數(shù)root提供了,那么root就是根視圖;否則填充的XML文件的根就是根視圖。

其余幾個(gè)重載的inflate函數(shù)類似。

該區(qū)別引用自:http://www.cnblogs.com/sanjinxiong/articles/2125142.html

2. AlertDialog.Builder()的使用

   AlertDialog是Dialog的一個(gè)直接子類,AlertDialog也是Android系統(tǒng)當(dāng)中最常用的對(duì)話框之一。
   一個(gè)AlertDialog可以有兩個(gè)以上的Button,可以對(duì)一個(gè)AlertDialog設(shè)置相應(yīng)的信息。比如title,massage,setSingleChoiceItems,setPositiveButton,setNegativeButton等等。。。。

   但不能直接通過AlertDialog的構(gòu)造函數(shù)來生產(chǎn)一個(gè)AlertDialog。研究AlertDialog的源碼發(fā)現(xiàn)AlertDialog所有的構(gòu)造方法都是寫保護(hù)的所以不能通過:AlertDialog alertDialog  = new AlertDialog();來得到。只能通過:

AlertDialog.Builder alertDialog  =new  AlertDialog.Builder(this);  

四、    圖片視圖(imageView)

針對(duì)imageVIew對(duì)象,通過setImageResource()方法設(shè)置要顯示圖片的資源索引。

 

實(shí)例分析:實(shí)現(xiàn)imageView對(duì)象,Alpha值的遞減。

關(guān)鍵源碼:

  1. public class Activity01 extends Activity{  
  2.     ImageView   imageview;  //聲明ImageView對(duì)象   
  3.     TextView    textview;  
  4.     int         image_alpha = 255//ImageView的alpha值,   
  5.     Handler     mHandler    = new Handler();  
  6.     boolean     isrung      = false//控件線程   
  7.   
  8.     public void onCreate(Bundle savedInstanceState){  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.main);  
  11.         isrung      = true;  
  12.         //獲得ImageView的對(duì)象   
  13.         imageview = (ImageView) this.findViewById(R.id.ImageView01);  
  14.         textview = (TextView) this.findViewById(R.id.TextView01);  
  15.           
  16.         //設(shè)置imageview的圖片資源。同樣可以再xml布局中像下面這樣寫   
  17.         //android:src="@drawable/logo"   
  18.         imageview.setImageResource(R.drawable.logo);  
  19.           
  20.         //設(shè)置imageview的Alpha值   
  21.         imageview.setAlpha(image_alpha);  
  22.   
  23.         //開啟一個(gè)線程來讓Alpha值遞減   
  24.         new Thread(new Runnable() {  
  25.             public void run(){  
  26.                 while (isrung){  
  27.                     try{  
  28. Thread.sleep(200);  
  29.                         //更新Alpha值   
  30.                         updateAlpha();  
  31.                     }catch (InterruptedException e){  
  32.                         e.printStackTrace();  
  33.                     }  
  34.                 }  
  35.             }  
  36.         }).start();  
  37.   
  38.         //接受消息之后更新imageview視圖   
  39.         mHandler = new Handler() {  
  40.             @Override  
  41.             public void handleMessage(Message msg){  
  42.                 super.handleMessage(msg);  
  43.                 imageview.setAlpha(image_alpha);  
  44.                 textview.setText("現(xiàn)在alpha值是:"+Integer.toString(image_alpha));  
  45.                 //更新   
  46.                 imageview.invalidate();  
  47.             }  
  48.         };  
  49.     }  
  50.       
  51.     public void updateAlpha(){  
  52.         if (image_alpha - 7 >= 0){  
  53.             image_alpha -= 7;  
  54.         }else{  
  55.             image_alpha = 0;  
  56.             isrung = false;  
  57.         }  
  58.         //發(fā)送需要更新imageview視圖的消息   
  59.         mHandler.sendMessage(mHandler.obtainMessage());  
  60.     }  
  61. }  

【擴(kuò)展點(diǎn)】Handler的使用

handler類允許你發(fā)送消息和處理線程消息隊(duì)列中的消息及runnable對(duì)象。handler實(shí)例都是與一個(gè)線程和該線程的消息隊(duì)列一起使用,一旦創(chuàng)建了一個(gè)新的handler實(shí)例,系統(tǒng)就把該實(shí)例與一個(gè)線程和該線程的消息隊(duì)列捆綁起來,這將可以發(fā)送消息和runnable對(duì)象給該消息隊(duì)列,并在消息隊(duì)列出口處處理它們。

handler類有兩種主要用途:1。按照時(shí)間計(jì)劃,在未來某時(shí)刻,對(duì)處理一個(gè)消息或執(zhí)行某個(gè)runnable實(shí)例。2。把一個(gè)對(duì)另外線程對(duì)象的操作請(qǐng)求放入消息隊(duì)列中,從而避免線程間沖突。

時(shí)間類消息通過如下方法使用: post(Runnable), postAtTime(Runnable, long), postDelayed(Runnable, long), sendEmptyMessage(int), sendMessage(Message), sendMessageAtTime(Message, long), and sendMessageDelayed(Message, long)

    methods. post之類函數(shù)可以傳輸一個(gè)runnable對(duì)象給消息隊(duì)列,并在到達(dá)消息隊(duì)列后被調(diào)用。sendmessage之類函數(shù)可以傳送一個(gè)包含數(shù)據(jù)的message對(duì)象,該message對(duì)象可以被Handler類的handleMessage(Message) 方法所處理。

    post之類函數(shù)和sendmessage之類的函數(shù)都可以指定消息的執(zhí)行時(shí)機(jī),是立即執(zhí)行、稍后一段時(shí)間執(zhí)行,還是在某個(gè)確定時(shí)刻執(zhí)行。這可以用來實(shí)現(xiàn)超時(shí)、消息或其他時(shí)間相關(guān)的操作。

    當(dāng)一個(gè)進(jìn)程啟動(dòng)時(shí),主線程獨(dú)立執(zhí)行一個(gè)消息隊(duì)列,該隊(duì)列管理著應(yīng)用頂層的對(duì)象(如:activities、broadcast receivers等等)和所有創(chuàng)建的窗口。你可以創(chuàng)建自己的一個(gè)線程,并通過handler來與主線程進(jìn)行通信。這可以通過在新的線程中調(diào)用主線程的handler的post和sendmessage操作來實(shí)現(xiàn)。

 

一、圖片按鈕(ImageButton)

ImageButton對(duì)象通過setImageDrawable()方法設(shè)置顯示圖片。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲国产性生活高潮免费视频| 出差被公高潮久久中文字幕| 亚洲一区二区三区有码| 美女被后入视频在线观看| 国产精品免费视频久久| 亚洲中文字幕日韩在线| 99久久国产亚洲综合精品| 色婷婷日本视频在线观看| 黑丝国产精品一区二区| av在线免费播放一区二区| 日韩在线中文字幕不卡| 丝袜av一区二区三区四区五区| 欧美精品久久99九九| 欧美午夜视频免费观看| 国产女优视频一区二区| 欧美极品欧美精品欧美| 好吊色欧美一区二区三区顽频| 国产又黄又猛又粗又爽的片| 国产剧情欧美日韩中文在线| 国产日韩欧美综合视频| 暴力三级a特黄在线观看| 国产日本欧美特黄在线观看| 欧美色婷婷综合狠狠爱| 人妻巨大乳一二三区麻豆| 亚洲中文字幕有码在线观看| 国产精品久久精品国产| 免费久久一级欧美特大黄孕妇| 正在播放国产又粗又长| 欧美精品在线播放一区二区| 日本高清一区免费不卡| 人妻一区二区三区在线| 亚洲性日韩精品一区二区| 天海翼精品久久中文字幕 | 久久国产精品热爱视频| 在线免费观看一二区视频| 国内午夜精品视频在线观看| 国产又黄又爽又粗视频在线| 不卡在线播放一区二区三区| 国产午夜福利一区二区| 免费在线观看激情小视频| 人妻精品一区二区三区视频免精 |