Android開發 - 掌握ConstraintLayout(一)傳統布局的問題

在傳統的Android開發中,頁面布局占用了我們很多的開發時間,而且面對復雜頁面的時候,傳統的一些布局會顯得非常復雜,每種布局都有特定的應用場景,我們通常需要各種布局結合起來使用來實現復雜的頁面。隨著ConstraintLayout的推出,這種現象有了很大的改善,而且它可以實現很多傳統布局難以實現的功能。

本系列我們就一起來學習ConstraintLayout的使用,來大幅提高我們的生產力。

傳統布局

在ConstraintLayout退出之前,我們經常使用FrameLayout, LinearLayout, RelativeLayout, *Layout等來布局頁面。這些布局當然有其方便的地方,但是其方便地同時也限制了我們的使用場景,在寫一些復雜頁面的時候就顯得力不從心,我們先做一下簡單地回顧:

  • FrameLayout:幀布局。最常用并且簡單的布局,通常用于錯誤頁面的顯示,蒙層的顯示等。
  • LinearLayout:線性布局。當我們繪制需要順序排列的內容時,我們使用使用此布局。
  • RelativeLayout:相對布局。相當于ConstraintLayout的低級版本。顧名思義,可以各個View之間相對地指定位置進行布局。
  • ...

存在的問題

以上布局并不是完美的,比如我們要布局這個頁面:

-w540

我們如果使用傳統的布局,可能會導致布局的層級多層嵌套:

<RelativeLayout><ImageView/><ImageView/><RelativeLayout><TextView/><LinearLayout><TextView/><RelativeLayout><EditText/></RelativeLayout></LinearLayout>...</RelativeLayout>...
</RelativeLayout>
  • 布局復雜

使用傳統的布局雖然可以實現我們的需求,但是在代碼實現中有非常多的嵌套,而且要結合許多布局的特性來實現,這樣復雜的布局讓我們難以維護。

  • 效率底下

當布局層級越深的時候,系統的繪制效率越低,當子View.invalidate()的時候,也會導致其父View進行重新繪制。
又比如這些布局中相對靈活的RelativeLayout,它會被測量至少兩次,已確定最終渲染時的位置,也同樣會影響效率。

  • 難以創建復雜動畫

Android在屬性動畫(ObjectAnimator)推出之前,執行動畫的原理其實只是在繪制的時候執行,并不是真正的改變了布局,在屬性推出之后,雖然確實可以改變其真實的布局屬性,但是由于布局特性的約束以及各個View之間的約束,創建復雜的動畫也并非易事。

ConstraintLayout登場!

下面我們進入本系列的主角:ConstraintLayout!

使用ConstraintLayout可以解決以上傳統布局存在的種種問題,而且Android Studio也提供了強大而且簡單易用的編輯器,使用它可以讓我們的開發效率大大增加。

下一篇我們將介紹它:Android開發 - 使用ConstraintLayout(二)介紹

如有更多疑問,請參考我的其它Android相關博客:我的博客地址

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450310.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450310.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450310.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

輸入流與輸出流的區別

stream結尾都是字節流&#xff0c;reader和writer結尾都是字符流兩者的區別就是讀寫的時候一個是按字節讀寫&#xff0c;一個是按字符。實際使用通常差不多。在讀寫文件需要對內容按行處理&#xff0c;比如比較特定字符&#xff0c;處理某一行數據的時候一般會選擇字符流。只是…

【Spring】Spring高級話題-@Enable***注解的工作原理

EnableAspectJAutoProxy 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 EnableAspectJAutoProxy注解 激活Aspect自動代理 <aop:aspectj-autoproxy/> 1 開啟對AspectJ自動代理的支…

IDEA項目找不到瀏覽器報錯的情況

調tomcat的時候&#xff0c;它會調用瀏覽器&#xff0c;瀏覽器關聯如果有問題&#xff0c;肯定是會報錯的 要是測試的時候&#xff0c;就是瀏覽器的問題&#xff0c;重新把瀏覽器裝一遍讓他自己重新關聯一下應該就行了轉載于:https://www.cnblogs.com/Koma-vv/p/10156478.html

c/c++經典面試試題及標準答案

下面的問題我想大部分c/c 程序員 都遇見過.如果沒有看過&#xff0c;草根IT特別推薦一下。 一、請填寫BOOL , float, 指針變量與“零值”比較的 if 語句。&#xff08;10分&#xff09;請寫出 BOOL flag 與“零值”比較的 if 語句。&#xff08;3分&#xff09;標準答案&#x…

微服務拆分

微服務拆分是做微服務架構很重要也很難的話題&#xff0c;很多時候&#xff0c;幾個服務是合還是拆在設計團隊內也很難達成共識。 當你糾結應該拆分和合并時我建議就先合并&#xff0c;等后面版本迭代需要時有必要再去做拆分。從系統發展的角度說&#xff0c;很多平臺也都是從單…

oracle數據庫學習筆記

字符函數是ORACLE中最常用的函數: Lower(char):將字符串轉化為小寫格式 Upper(char):將字符轉化為大寫的格式 Length(char):返回字符串的長度 Substr(char,m,n):取字符串的子串 Trim,Ltrim,Rtrim:去掉空格 dual 虛表 當沒有表可以用的時候 就用虛表 as 當做 可以理解為別…

并發編程-concurrent指南-線程池ExecutorService的使用

有幾種不同的方式來將任務委托給 ExecutorService 去執行&#xff1a; execute(Runnable)submit(Runnable)submit(Callable)invokeAny(…)invokeAll(…)execute(Runnable) execute(Runnable) 方法要求一個 java.lang.Runnable 對象&#xff0c;然后對它進行異步執行。以下是使用…

怎樣去理解@ComponentScan注解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 怎么樣去理解它呢&#xff1f; 1.配置視圖控制器 [java] view plain copy package com.apress.prospringmvc.bookstore.web.config; imp…

oracle 如何創建序列squence

create sequence 序列名 start with 1 increment by 1 nomaxvalue nominvalue nocycle nocache;

如何高效、可移植申請內存代碼。

在視頻編解碼中&#xff0c;如何申請char mem_2D[1920][1080], char mem_3D[4][1920][1080], char mem_4D[6][4][1920][1080]&#xff0c;高效 又 可移植申請內存呢&#xff1f; 請看如下代碼&#xff1a; 看完后&#xff0c;如要申請的是 int &#xff0c;不是cha…

CSS中的px與物理像素、邏輯像素、1px邊框問題

一直不太清楚CSS中的1px與邏輯像素、物理像素是個什么關系&#xff08;作為一名前端感覺很慚愧 -_-&#xff01;&#xff09;&#xff0c;今天終于花時間徹底弄清楚了&#xff0c;其實弄清楚之后就覺得事情很簡單&#xff0c;但也只有在弄清楚之后&#xff0c;才會覺得簡單&…

平滑數據遷移,不影響服務

為什么80%的碼農都做不了架構師&#xff1f;>>> 轉自&#xff1a;http://www.10tiao.com/html/249/201703/2651959992/1.html 轉載于:https://my.oschina.net/jzgycq/blog/2872104

spring cache相關注解介紹 @Cacheable、@CachePut、@CacheEvict

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Cacheable是用來聲明方法是可緩存的。將結果存儲到緩存中以便后續使用相同參數調用時不需執行實際的方法。直接從緩存中取值。最簡單的格…

layui 渲染select下拉選項 ,日期控件的用法

最近項目中用到關于layui的前端技術&#xff0c;在使用layui 渲染select option下拉復選框時出現了沒有值渲染的問題&#xff0c;還有使用layui日期的過程 &#xff0c;接下來就一起看看吧。 /** *從后臺渲染字段民族數據/<div class"layui-inline"><labe…

CF1082G Petya and Graph(最小割,最大權閉合子圖)

QWQ嚶嚶嚶 感覺是最水的一道\(G\)題了 順便記錄一下第一次在考場上做出來G qwqqq 題目大意就是說&#xff1a; 給你n個點&#xff0c;m條邊&#xff0c;讓你選出來一些邊&#xff0c;最大化邊權減點權 \(n\le 1000\) QWQ 看完這個題和數據范圍&#xff0c;第一感覺就是網絡流啊…

NET Core微服務之路:讓我們對上一個Demo通訊進行修改,完成RPC通訊

最近一段時間有些事情耽擱了更新&#xff0c;抱歉各位了。上一篇我們簡單的介紹了DotNetty通信框架&#xff0c;并簡單的介紹了基于DotNetty實現了回路&#xff08;Echo&#xff09;通信過程。我們來回憶一下上一個項目的整個流程&#xff1a;當服務端啟動后&#xff0c;綁定并…

Centos7防火墻設置

查看防火墻狀態 or rootlocalhost ~]# systemctl status firewalld / firewall-cmd --state 啟動防火墻 [rootlocalhost ~]# systemctl start firewalld 關閉防火墻 [rootlocalhost ~]# systemctl stop firewalld 設置開機啟動 [rootlocalhost ~]# systemctl enable fi…

HTTP協議中POST、GET、HEAD、PUT等請求方法及相應值得含義

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 請求方法是請求一定的Web頁面的程序或用于特定的URL。可選用下列幾種&#xff1a; GET&#xff1a; 請求指定的頁面信息&#xff0c;并…

java面試題文檔(QA)

– 基礎篇 1、 Java語言有哪些特點2、面向對象和面向過程的區別3 、八種基本數據類型的大小&#xff0c;以及他們的封裝類4、標識符的命名規則。5、instanceof 關鍵字的作用6、Java自動裝箱與拆箱7、 重載和重寫的區別8、 equals與的區別9、 Hashcode的作用10、String、String …

第四次軟件工程作業

關于 石墨文檔客戶端 的案例分析 作業地址&#xff1a; https://edu.cnblogs.com/campus/nenu/2016CS/homework/2505 第一部分 調研&#xff0c; 評測 1.下載并使用&#xff0c;按照描述的bug定義&#xff0c;找3~5個功能性的比較嚴重的bug。請用專業的語言描述&#xff08;每個…