Android基礎之七:UI開發

來源:互聯網
上載者:User

標籤:

  • 需要用到的編程元素
    • 視圖:View,可視化元素的基類,所有組件、視圖等都是由View派生出去的
    • 視圖組:ViewGroup,是View的擴充,可以包括多個子視圖
    • Fragment:類似於前期的Activity片段,擁有獨立的布局,但是需要綁定到Activity上
    • Activity:基本顯示單元,用於顯示介面
  • 布局
    • 布局管理器是基於ViewGroup的擴充,用來控制子控制項的位置,是能夠嵌套的
    • 一個布局通常用單獨的布局檔案來定義,實現代碼與資源的分離化,便於管理
    • Android SDK中提供了許多布局類,可以通過使用這些布局類來實現布局,也可以修改這些類,建立自己的布局
      • FrameLayout
        • 最簡單的布局管理器
        • 基於左上方布局
        • 通過gravity可以改變位置
        • 重疊布局
        • margin屬性定義位置無效
      • LinearLayout
        • 線性布局
        • 必須定義布局方向:oritation
        • 一行或一列只能有一個視圖組件
        • 可以通過margin或gravity來定義位置
      • RelativeLayout
        • 相對布局
        • 最靈活的布局,能夠實現布局相對於螢幕邊界距離來布局
        • 預設相對top,left布局
        • 當然子布局也可以相對於其他組件定位
      • GridLayout
        • 舉矩形網格布局
        • Android4.0以後才可以使用
        • 簡化了布局嵌套
    • 定義布局
      • 在layout資源檔夾中建立xml布局檔案來實現布局的編輯
      • 一般根項目是LinearLayout
      • 其中常用屬性與值
        • wrap_contant:用於設定width或height值,表示根據內容計算
        • match_parent:用於設定width或height值,表示與父元素大小一樣
        • fill_parent:用於設定width或height值,表示填充到與父元素允許的大小,與match_parent基本相同
        • gravity:內部元素的位置
        • layout_gravity:自身相對於父元素的位置,注意在FrameLayout中不起作用
        • textAllCaps:字母大小寫顯示標誌
        • hint:類似於placeholder,浮水印提示
        • entries:adapter適配器填充,用於列表組件等填充資料
    • 代碼建立布局(雖然強烈建議不要使用)
      • 每個布局元素都有對應的類,通過這些類能夠實現代碼中構造布局
      • 執行個體代碼
      • LinearLayout linearLayout=new LinearLayout(MyActivity.this);TextView tv=new TextView(MyActivity.this);LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(100,50);linearLayout.addView(tv,layoutParams);
      • 通過findViewById來擷取contView布局檔案中的子項目
      • 布局檔案xml轉換成view
        • LayoutInflator類是專門用於將layout布局檔案解析成View執行個體的工具類
        • 擷取LayoutInflator執行個體的方法
          • Activity中getLayoutInflator()
          • 內部靜態方法LayoutInflator.from(context)
          • 系統Service擷取:(LayoutInflator)getSystemService(Context.LAYOUT_INFLATOR_SERVICE);
    • 布局嵌套
      • 填充布局開銷非常大,複雜的介面需要使用大量的布局去嵌套
      • 注意規避UI布局的冗餘
      • 減少不必要的父元素,例如FrameLayout子項目只有一個LinearLayout,那麼這個FrameLayout還有什麼意義,等等。。
      • 布局填充merge與include結合使用
        • include是將一個布局插入到另一個布局中的用法
        • 子布局父元素設定為FrameLayout等布局都是比較消耗資源的,可以使用merge代替根項目,merge在填充的時候會自動刪除
      • 不要使用太多的View,太多的View填充需要消耗大量時間和資源,影響程式響應速度,單個不置中包含的View不能超過80個,越少越好
      • 如果存在大量的view,那麼就用ViewStub來控制暫時不需要顯示的view
      • ViewStub
        • ViewStub能夠建立暫時不需要顯示的View布局,可以動態建立,也可以布局檔案靜態配置
        • 當需要顯示的時候通過ViewStub執行個體的inflate或者setVisibility來顯示
        • inflate與setVisibility的區別
          • inflate只能填充一次,用於視圖的填充,填充後會被置空,不能第二次調用inflate方法,否則會拋出異常
          • setVisibility能夠多次顯示隱藏控制ViewStub,因此建議使用setVisibility
        • ViewStub中的元素只有在被填充後才能通過findViewById來擷取,否則會拋異常
    • 拆分布局Fragment
      • Fragment是新一代片段組件,取代了最初的Activity片段的設計,比Activity更輕量,有用自己完整的生命週期
      • Fragment能過實現不同螢幕大小裝置建立靈活的UI
      • 每個Fragment是獨立的模組,並且是綁定在Activity上的,關係是多對多
      • Fragment是在Android3.0以後出現的,在3.0以前如果使用必須繼承自FragmentActivity
      • Fragment的使用
        • 建立
          • 建立一個繼承自Fragment的類,在Android3.0以後是android.app.Fragment;之前是android.support.v4.app.Fragment
          • 在onCreateView中填充需要的布局
          • 建立Fragment自己的布局檔案資源,可以建立不同螢幕大小的資源,在onCreateView中動態判斷填充的資源
      • Fragment的生命週期
        • onAttach:將Fragment綁定到Activity上
        • onCreate:建立
        • onCreateView:填充視圖
        • onActivityCreated:Activity填充完畢
        • onResume
        • onPause
        • onSaveStateInstance
        • onStop
        • onDestoryView:清空視圖
        • onDestory:銷毀
        • onDetach:解除綁定
      • Fragment與Activity通訊

Android基礎之七:UI開發

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.