Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 布局與控件(五)-Toast吐司與布局的抽象標簽merge include ViewStub

布局與控件(五)-Toast吐司與布局的抽象標簽merge include ViewStub

編輯:關於Android編程

第5節 Toast

5.1 使用效果

Toast用來向用戶彈出一個提示框,然後自動消失,就像這樣,

\

面包機烤好面包後,就騰的一下把面包從面包機裡彈出來。而這個控件顯示時也像是從面包機裡彈出來的,所以取了這個名字-Toast(吐司)。

使用Toast顯示消息的時候,即使啟動它的Activity並沒有顯示在屏幕上,Toast提示的消息也會被顯示到最前面,讓用戶看到。例如,

Activity A正通過網絡下載一個文件, 此時用戶點擊Home回到主界面,又啟動了另一個應用的Activity B;現在Activity A不再顯示了; 下載完成後,隱藏起來的Activity A使用Toast給用戶一個提示; 雖然Activity A現在沒有顯示出來,但是它使用Toast給出的提示,還是會被顯示到整個界面的最上面,被用戶看到;

5.2 顯示原理

這是因為Toast會顯示在一個特別的窗口層次上,這個窗口比任何Activity使用的窗口層次更高,更優先的顯示到上層。

關於窗口系統具體的原理,我們會在安卓系統的窗口機制相關章節進行介紹。

5.3 使用方式

調用Toast的makeText函數生成一個Toast對象,再調用它的show函數顯示出來。makeText有三個參數,第一個是Context對象,第二個是要顯示的字符串,第三個是要顯示的時長。

\ 第一個參數Context:是當前Activity運行的上下文環境,也就是它運行時所擁有的各種系統資源。Activity是從Context繼承而來的,所以Activity本事就是我們要找的context; 第二個參數:是要顯示的內容; 第三個參數:顯示的時間長短,它只能設置長或短。
Toast.LENGTH_SHORT,Toast.LENGTH_LONG。
Toast.makeText(context, "需要顯示的內容", Toast.LENGTH_SHORT).show()

第6節 布局的抽象標簽-merge include ViewStub

include標簽、merge標簽,以及ViewStub標簽是安卓布局使用的抽象標簽。它們並不代表某個具體的布局或者控件,而是起布局的輔助作用,提高布局執行的效率和易用性。

例如,對於那些會重復使用到的布局結構,可以它們放到一個單獨的layout文件中。當我們在任何要使用這個布局的地方,就通過復用的方法,將它包含到新的布局文件中。

假設下面這個布局結構會被經常的使用,我們就可以將它單獨定義到一個獨立的布局文件reuse.xml

<framelayout android:layout_height="match_parent" android:layout_width="match_parent">

   

</framelayout>

6.1 include標簽

當別的布局文件main_layout.xml,要使用上面被獨立出來的布局時,就可以用標簽把這個布局包含進來。在標簽的layout屬性中,指定要復用的布局的id就可以了。

例如main_layout.xml使用標簽,



   
   

此時main_layout.xml實際上,就變成了,



    
   <framelayout android:layout_height="match_parent" android:layout_width="match_parent">

       

   </framelayout>
   

6.2 merge標簽

再來看看merge標簽,將reuse.xml中的FrameLayout修改成merge


          

main_layout.xml繼續使用標簽,



   
   

此時main_layout.xml實際就變成了,



    
   
   

與之前相比,少了FrameLayout一層。在布局時少一個層次的包裹,可以增加布局的效率。

6.3 ViewStub標簽

這是一個布局的占位符。當一個布局包含了這種標簽,它並不會加載這個標簽的內容,而是在需要的時候,通過代碼來動態加載。

例如,一個布局main_layout.xml裡面,有一個ProgressBar,布局被加載時,這個ProgressBar就會被創建出來,



   

          
   

如果我們將ProgressBar放到一個單獨的布局文件progress_layout.xml當中,


然後main_layout.xml中使用ViewStub引用這個布局,



   

          
    ---為這個ViewStub被代替之後,給代替者一個ID

布局被加載時,這個ProgressBar並不會被創建出來。使用如下方式,就可以把ViewStub,替換成android:layout指定的布局,

在代碼中使用setVisibility()函數,

((ViewStub) findViewById(R.id.viewstub_id)).setVisibility(View.VISIBLE);

在代碼中使用inflate()函數,

((ViewStub) findViewById(R.id.viewstub_id)).inflate();

替換之後,ViewStub就被從布局當中移除了,這個布局就變成了,



   

          
   

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved