Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 開發入門 >> 牛人適合理解的android UI編程

牛人適合理解的android UI編程

日期:2016/3/13 17:12:41      編輯:開發入門

最進學習android的手機軟件開發,每次都會有開發筆記,這個是其中之一,我前面有說過android的前景,具體的可以回到前面看下

                   (在讀本文之前,會缺省的認為你已經知道如何創建一個android項目,並知道如何在模擬器中運行這個項目。並且,期望你已經有一點Html或者其他GUI的開發經驗。)
      在我的理解中,對開發者來說,寫J2SE的程序和J2ME的程序相比,最大的區別不是他們API或者是其他一些規則、限制等的不同,更多的是兩者程序界面(或者說UI)方面的區別。
      我們寫任何一段程序,都是需要有UI的,因為我們的程序最終是給用戶去用的,即使我們寫了一個工具,沒有任何顯式IO,我們也還是需要暴露必要的方法來提供別人使用,在此情景下,這些方法似乎也可以看作是UI。
      對J2SE來說,一般都不會需要GUI,因為我們很少去寫SWING、SWT程序,即使Sun力推的JavaFX,好像涉及的也不多,而對於 J2ME來說,最大的困難可以就是那些GUI的實現,以及如何將程序的功能綁定到那些界面上,從界面中接收用戶的輸入,或者是用合適、合理的方式向界面輸出,無論是通過文本,或是曲線、圖形。
     同理,如果你有J2EE的經驗,服務後台的代碼往往是相對易讀、易懂、系統並且內聚的,這些代碼看起來是如此的和諧、整潔、干淨。而如果涉及到界面,就會陡然復雜的多,即使各種各樣的framework試圖要解決VIEw與Model、Control的協作問題,結果卻讓大家更加的迷惑於各種配置之間。總是有GUI的程序都會看起來有些凌亂和繁蕪。
     似乎有些跑題… 打住…:)。咳咳,同樣,對於android開發來說,用戶界面的實現應該是比較重要的和復雜的一環。好消息是,到目前為止,“神仙”們也沒有發現其他更好的用戶界面實現方式,所以說如果有Html設計經驗,或者說有Swing,Flash等圖形設計經驗,那麼理解android的UI設計,會容易的多,甚至會有似曾相識的感覺。
     android的用戶界面可以有兩種實現方式:使用XML或者是使用Java代碼。通過直接書寫代碼的方式來實現界面是比較恐怖的事情。舉個例子來說,如果你有DHtml的經驗,那麼這兩者的區別可以比喻為:用XML來實現用戶界面就像直接寫Html代碼,而用 Java代碼來實現用戶界面就像用Javascript創建DOM對象來拼接頁面。所以,使用XML來布局界面應該是首選。
     android使用一個XML文件來定義用戶界面。為了方便理解,你可以直接把它理解為一個HTML文件。事實上,它也確實比較像一個Html文件。
這個XML文件的格式為:

<VIEwGroupClass XMLns:android="http://schemas.android.com/apk/res/android" 
id="@+id/string_name" (attributes)> 
<widget or other nested VIEwGroupClass>+ 
<requestFocus/>(0 or 1 per layout file, assigned to any element) 
</VIEwGroupClass>

這裡面有一個比較重要的類叫VIEwGroup,這個XML的root節點必須是一個VIEwGroup,

  • AbsoluteLayout
  • FrameLayout
  • LinearLayout
  • RelativeLayout
  • TableLayout
  • … 其他還有很多,以後用到的時候再說,一次性把這些東西都弄明白既不客觀也不現實。
  • 從上述這幾個類從名字就可看的出來,他們是Layout,也就是布局,如果用過Swing的話,這些東西和Swing的那套東西一致,如果沒有用過 Swing,希望你用過Html,那麼每一個Layout,可以理解為有了特定排版樣式的DIV。在DIV的內部,可以放置其他的DIV,當然也可以放置最底層的元素,比如說文本、文本框、單選按鈕、圖片等等。這裡面所說的最底層的元素,它們有一個超類叫做View,這個超類非常的超,連 ViewGroup都是它的子類。ViewGroup就是能容納其他View的View。常用的VIEw有很多,可以參考這裡,後文再介紹。

    關於XML布局,可以總結一下:
  • 這個XML文件是由許多VIEw嵌套組成的
  • 如果布局中有多個元素,那麼最頂層必須是ViewGroup(一個ViewGroup對象同時也是一個View對象),不可以是VIEw,如果整個布局只有一個元素,那麼最頂層元素就是這個唯一的元素。
  • 在ViewGroup可以內部嵌套View(既然可以嵌套View,就更以嵌套VIEwGroup了)
  • 在View中,不可嵌套其他東西了,要不然它就是VIEwGroup了,就是這麼定義的。

  • 本次學習主要是說android的項目的各個文件的作用,以及相互之間的調用,對於學習andriod軟件開發有很大的好處。只要了解運行機制才能更好的控制各個模塊和用戶的交互。同時這樣能更好的了解他的運行機制以及生命周期。

    通過上一篇文章,大概了解了android用戶界面的設計方式,以及如何通過XML來設計界面。並且完成了一個非常簡單的示例。 在上一篇文章中,涉及到了一些資源文件,直觀點說,就是res目錄下的那些目錄和文件,常用的有:
    • res/drawable/ 用來存放圖片文件
    • res/layout/ 用來存放布局定義文件
    • res/values/ 用來存放一些變量、參數等文件
    這些資源文件都是獨立於代碼而存在的,那麼在代碼中又是如何訪問到這些資源的呢? 在 Android的代碼中,有一個文件比較奇怪,第一次接觸到android代碼的人都應該迷惑過,這個文件就是R.Java,在R.Java的注釋部分, 有這樣一段話:“AUTO-GENERATE FILE. DO NOT MODIFY”,這個文件是自動生成的,不要修改。
    • 這個文件就是Java代碼和獨立於Java代碼的資源文件之間的訪問窗口,Java程序可以通過R.Java來訪問那些資源文件。
    • 這個文件是在程序編譯過程中由aapt(android Asset Packaging Tool) 自動生成
    • 這個文件中的屬性都是public static final的,所以可以直接在Java代碼中引用,每個屬性都代表一個資源,看起來就像為每個資源都定義了一個ID,然後通過這個ID來訪問資源
    • 所有的資源文件都被編譯進最後生成的二進制包中,這樣能夠帶來很高的性能和效率
    按照前面的示例,那麼在R.Java中會存在像這樣一段代碼: public final class R {
            public static final class attr {
            }
            public static final class drawable {
                    public static final int icon=0x7f020000;
            }
            public static final class layout {
                    public static final int main=0x7f030000;
            }
            public static final class string {
                    public static final int app_name=0x7f040001;
                    public static final int hello=0x7f040000;
            }
    }這裡面的main就是由res/layout/main.xml生成的,其他兩個常量是由res/drawable/下icon.png和res/values/strings.XML生成的。
    接下來在看一下,如何在Java代碼中使用這個R.java,創建一個文件Adventure.Java :(開始快樂的學習旅程^_^)
    package com.penguin.adventure;import android.app.Activity;
    import android.os.Bundle;public class Adventure extends Activity {
            /** Called when the activity is first created. */
            @Override
            public void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentVIEw(R.layout.main);
            }
    } 注意這其中的R.layout.main,通過setContextVIEw(),被Java程序調用。 這段代碼中引入了另外一個非常重要的概念:Activity,到目前為止,已經介紹的另外兩個比較重要的概念是 ViewGroup和View。如果套用時髦的MVC來理解的話:ViewGroup和View屬於View領域的東西,Activity可以理解為 Control領域的東西,雖然可以這麼類比著來理解,但是Activity其實做了更多的事情,由它將View和一些數據、操作等結合在一起,完成一個相對完整的行為、活動。所以,任何 VIEw要被顯示,必須通過Activity來進行。這樣每個Activity都會包含特定的行為,多個Activity互相合作,最終組成一個完整的 android程序。 
    在示例的Activity中,有一個onCreate()方法,這個方法會在此Activity被創建的時刻調用。在方法內部,設置此 Activity的視圖為R.layout.main中定義的視圖,也就是res/layout/main.XML中定義的視圖 (視圖、布局、GUI、UI在這裡已經混合使用了,並且他們意義相同,後文統一用View表示)。 Activity所包含的內容很多,會用單獨的一篇文章來詳細介紹。 說到此處,我們應該知道如何創建一個VIEw,並通過Activity將其顯示在屏幕上。接下來事情,就是用戶如何和這個Activity交互。
    1. 上一頁:
    2. 下一頁:
    熱門文章
    閱讀排行版
    Copyright © Android教程網 All Rights Reserved