Android基礎之七:UI開發

  • 須要用到的編程元素
    • 視圖: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通訊
相關文章
相關標籤/搜索