Google 開源的 Android 排版庫:FlexboxLayout

最近Google開源了一個項目叫「FlexboxLayout」。

1.什么是 Flexbox

簡單來說 Flexbox 是屬于web前端領域CSS的一種布局方案,是2009年W3C提出了一種新的布局方案,可以簡便、完整、響應式地實現各種頁面布局,并且 React Native 也是使用的 Flex 布局。

你可以簡單的理解為 Flexbox 是CSS領域類似 Linearlayout 的一種布局,但是要比 Linearlayout 要強大的多。

2.什么是 FlexboxLayout?

剛才說了 Flexbox 是CSS領域的比較強大的一個布局,我們在 Android 開發中使用 Linearlayout + RelativeLayout 基本可以實現大部分復雜的布局,但是Google就想了,有沒有類似 Flexbox 的一個布局呢?這使用起來一個布局就可以搞定各種復雜的情況了,于是 FlexboxLayout 就應運而生了。

所以 FlexboxLayout 是針對 Android 平臺的,實現類似 Flexbox 布局方案的一個開源項目,開源地址:https://github.com/google/flexbox-layout

3.使用方式

使用方式很簡單,只需要添加以下依賴:

compile?'com.google.android:flexbox:0.1.2'

xml中這樣使用:

<com.google.android.flexbox.FlexboxLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"app:flexWrap="wrap"app:alignItems="stretch"app:alignContent="stretch"?><TextViewandroid:id="@+id/textview1"android:layout_width="120dp"android:layout_height="80dp"app:layout_flexBasisPercent="50%"/><TextViewandroid:id="@+id/textview2"android:layout_width="80dp"android:layout_height="80dp"app:layout_alignSelf="center"/><TextViewandroid:id="@+id/textview3"android:layout_width="160dp"android:layout_height="80dp"app:layout_alignSelf="flex_end"/>
</com.google.android.flexbox.FlexboxLayout>

或者代碼中這樣使用:

FlexboxLayout?flexboxLayout?=?(FlexboxLayout)?findViewById(R.id.flexbox_layout);
flexboxLayout.setFlexDirection(FlexboxLayout.FLEX_DIRECTION_COLUMN);View?view?=?flexboxLayout.getChildAt(0);
FlexboxLayout.LayoutParams?lp?=?(FlexboxLayout.LayoutParams)?view.getLayoutParams();
lp.order?=?-1;
lp.flexGrow?=?2;
view.setLayoutParams(lp);

使用起來是不是很像Linearlayout的用法,只不過有很多屬性你們比較陌生,這些屬性都是Flexbox布局本身具備的,別著急,下面跟你們介紹下FlexboxLayout的一些具體屬性的用法與意義。

4.支持的屬性

flexDirection

flexDirection?屬性決定主軸的方向(即項目的排列方向)。類似 LinearLayout 的 vertical 和 horizontal。

有四個值可以選擇:

  • row(默認值):主軸為水平方向,起點在左端。

  • row-reverse:主軸為水平方向,起點在右端。

  • column:主軸為垂直方向,起點在上沿。

  • column-reverse:主軸為垂直方向,起點在下沿。

flexWrap

默認情況下 Flex 跟 LinearLayout 一樣,都是不帶換行排列的,但是flexWrap屬性可以支持換行排列。有三個值:

  • nowrap :不換行

  • wrap:按正常方向換行

  • wrap-reverse:按反方向換行

justifyContent

justifyContent屬性定義了項目在主軸上的對齊方式。

  • flex-start(默認值):左對齊

  • flex-end:右對齊

  • center: 居中

  • space-between:兩端對齊,項目之間的間隔都相等。

  • space-around:每個項目兩側的間隔相等。所以,項目之間的間隔比項目與邊框的間隔大一倍。

alignItems

alignItems屬性定義項目在副軸軸上如何對齊。

  • flex-start:交叉軸的起點對齊。

  • flex-end:交叉軸的終點對齊。

  • center:交叉軸的中點對齊。

  • baseline: 項目的第一行文字的基線對齊。

  • stretch(默認值):如果項目未設置高度或設為auto,將占滿整個容器的高度。


alignContent

alignContent屬性定義了多根軸線的對齊方式。如果項目只有一根軸線,該屬性不起作用。

  • flex-start:與交叉軸的起點對齊。

  • flex-end:與交叉軸的終點對齊。

  • center:與交叉軸的中點對齊。

  • space-between:與交叉軸兩端對齊,軸線之間的間隔平均分布。

  • space-around:每根軸線兩側的間隔都相等。所以,軸線之間的間隔比軸線與邊框的間隔大一倍。

  • stretch(默認值):軸線占滿整個交叉軸。

5.子元素屬性

除以上之外,FlexboxLayout還支持如下子元素屬性:

layout_order

默認情況下子元素的排列方式按照文檔流的順序依次排序,而order屬性可以控制排列的順序,負值在前,正值災后,按照從小到大的順序依次排列。我們說之所以 FlexboxLayout 相對LinearLayout強就是因為一些屬性比較給力,order就是其中之一。

layout_flexGrow

layout_flexGrow 屬性定義項目的放大比例,默認為0,即如果存在剩余空間,也不放大。一張圖看懂。跟 LinearLayout 中的weight屬性一樣。

如果所有項目的 layout_flexGrow ?屬性都為1,則它們將等分剩余空間(如果有的話)。如果一個項目的 layout_flexGrow ?屬性為2,其他項目都為1,則前者占據的剩余空間將比其他項多一倍。

layout_flexShrink

layout_flexShrink ?屬性定義了項目的縮小比例,默認為1,即如果空間不足,該項目將縮小。

如果所有項目的 layout_flexShrink ?屬性都為1,當空間不足時,都將等比例縮小。如果一個項目的flex-shrink屬性為0,其他項目都為1,則空間不足時,前者不縮小。

負值對該屬性無效。

layout_alignSelf

layout_alignSelf ?屬性允許單個子元素有與其他子元素不一樣的對齊方式,可覆蓋 alignItems 屬性。默認值為auto,表示繼承父元素的 alignItems 屬性,如果沒有父元素,則等同于stretch。

  • auto (default)

  • flex_start

  • flex_end

  • center

  • baseline

  • stretch

該屬性可能取6個值,除了auto,其他都與align-items屬性完全一致。

layout_flexBasisPercent

layout_flexBasisPercent 屬性定義了在分配多余空間之前,子元素占據的main size主軸空間,瀏覽器根據這個屬性,計算主軸是否有多余空間。它的默認值為auto,即子元素的本來大小。

6.不同之處

跟傳統的CSS中的Flexbox布局有些不同的是:

1. 沒有 flex-flow 屬性

2. 沒有 flex 屬性

3.?layout_flexBasisPercent 屬性即為CSS中 flexbox 中的?flexBasis?屬性

4. 不支持 min-width 和 min-height 兩個屬性

以上就是 FlexboxLayout 的一些基本介紹與基本用法,值得提醒大家的是,本身這個項目也是一個很好的自定義View的學習資料,值得大家學習借鑒!

參考:

本文的很多 Flexbox 方面的知識大量參考了我司同事的這篇文章,想要更多的了解 Flexbox 相關的知識建議閱讀這里:

http://w4lle.github.io/2016/05/08/Flexbox/

出處:微信公眾平臺?AndroidDeveloper

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

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

相關文章

Docker Network 配置,自定義bridge網絡

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182Docker Network 配置&#xff0c;自定義bridge網絡 1.停止服務 service docker stop 2.關掉docker0 ifconfi…

再見 KataCoda——O'Reilly 宣布其將在六月份關閉

近日聽聞 OReilly 將永久關閉在線學習網站 KataCoda&#xff0c;對于廣大程序員和學習者來說&#xff0c;這無疑是一件痛心疾首的事情&#xff0c;以后我們再也看不到那只會變成的功夫貓了。KataCoda 簡介KataCoda 成立于 2016 年&#xff0c;它是一個在線學習平臺&#xff0c;…

中國區域Modis行列號(附Shapefile文件下載)

重磅&#xff1a;Landsat中國西北地區行列號Shapefile圖層對照&#xff08;附行列號Shapefile下載&#xff09; 全球&#xff1a; 中國&#xff1a;

Android之解決webview加載第三方網頁點擊彈不出下拉框(html頁面里面的select標簽)

1 問題 決webview加載第三方網頁點擊彈不出下拉框&#xff08;html頁面里面的select標簽&#xff09;&#xff0c;我們訪問youtube.com官網&#xff0c;點擊網站的視頻&#xff0c;點擊視頻右上角三個點設置&#xff0c;然后點擊 播放設置 然后點擊畫質 彈不出選項框&#xf…

【前端就業課 第一階段】HTML5 零基礎到實戰(四)偽類與偽元素

注意&#xff1a;手機&#xff08;APP&#xff09;打開&#xff0c;內容顯示更佳&#xff0c;不會的私聊博主即可 想要拿代碼或加入學習計劃&#xff08;** 博主會監督你并且教你寫文章 **&#xff09;的拉到最下面&#xff08;PC端Web打開&#xff09;加博主即可&#xff0c;目…

編寫第一個響應式頁面

2019獨角獸企業重金招聘Python工程師標準>>> 本文為大家講解如何使用一種科學的方法實現網頁設計&#xff0c;從原理上搞清楚什么是響應式設計&#xff0c;并實現一個簡易的響應式設計框架&#xff0c;以此為基礎&#xff0c;編寫出第一個響應式頁面。 不知道現在大…

container 的背后

如果要看laravel的單個功能的源代碼&#xff0c;首先去找對應得ServiceProvider,例如加密功能hash,則按一下步驟查看源代碼&#xff1a; HashServiceProvider.php(主要是看register方法) singleton()方法就是將BcryptHasher這個類實例化一次&#xff0c;然后在哪里都可以用&…

android中像素單位dp、px、pt、sp的比較

dp(dip): device independent pixels(設備獨立像素). 不同設備有不同的顯示效果,這個和設備硬件有關&#xff0c;一般我們為了支持WVGA、HVGA和QVGA 推薦使用這個&#xff0c;不依賴像素。px: pixels(像素). 不同設備顯示效果相同&#xff0c;一般我們HVGA代表320x480像素&…

ArcGIS10.8完美實現MODIS NDVI數據格式轉換和投影變換

大家都熟知,MODIS NDVI數據的處理一般是在MRT中進行的,但熟不知ArcGIS中也可以實現投影變換個數據格式的轉換,本文就以MOD13Q1.A2020001.h26v05.006.2020018002618.hdf這一景影像為例,實現將正弦曲線投影轉換為Albers等積投影,將hdf格式轉為tif。 ArcGIS python批處理代碼…

開源項目千千萬,如何發現好項目

視頻來自 OSSInsight 推特。不知道大家聽說沒有 PingCAP 推出的一個 OSSInsight.io 網站&#xff0c;可以根據 GitHub 上的事件&#xff0c;提供開源軟件洞察&#xff0c;這個項目也開源在 GitHub[1] 上。它可以提供以下方面的洞察能力&#xff0c;有點類似于 Google Analytics…

Git之回退已經提交到遠程倉庫的代碼(已經push的代碼)

1 問題 git 把當前的修改已經push到遠程倉庫&#xff0c;現在需要回退這個遠程提交 2 解決辦法 1&#xff09;、我們用git log命令找到commit Id d6434e39e842a40b79119b2b88e76dd1498f8654是我最后一次提交&#xff0c; 然后我們現在需要回退到145c4fc7f237176acba1bca515e9…

構建微型數據中心——在laptop上運行Rancher

對于開發人員而言&#xff0c;他們的最終目標是擁有自己的數據中心&#xff08;data center&#xff09;&#xff0c;使他們能夠在貼近真實情況的副本上測試他們的服務。然而&#xff0c;開發人員的開發過程中卻充滿了妥協。因為&#xff0c;數據要么是個簡化集&#xff0c;要么…

【前端就業課 第一階段】HTML5 零基礎到實戰(五)基礎元素

注意&#xff1a;手機&#xff08;APP&#xff09;打開&#xff0c;內容顯示更佳&#xff0c;不會的私聊博主即可&#xff08;知識點結構參考《HTML5入門到精通》&#xff09; 想要拿代碼或加入學習計劃&#xff08;** 博主會監督你并且教你寫文章 **&#xff09;的拉到最下面&…

phpUnit 安裝,實例和簡單部署

背景&#xff1a;一個小腳本&#xff0c;保證穩定為主&#xff1b;所以試用了下phpunit&#xff0c;快捷方便phpunit 的安裝 phpunit是一個輕量級的php單元測試框架&#xff0c;通過pear安裝安裝過程 wget https://phar.phpunit.de/phpunit.phar chmod x phpunit.phar sudo mv …

1、RN跨平臺開發——環境搭建

了解React NativeReact Native使你能夠在Javascript和React的基礎上獲得完全一致的開發體驗&#xff0c;構建世界一流的原生APP。React Native著力于提高多平臺開發的開發效率 —— 僅需學習一次&#xff0c;編寫任何平臺。(Learn once, write anywhere)。Facebook已經在多項產…

Android之替換App桌面圖標

1、需求 需要動態替換app在桌面的圖標 2、解決辦法 1)、在AndroidManifest.xml里面進行配置多個啟動的alias別名 啟動的activity <activityandroid:name=".ui.SplashActivity"android:launchMode="singleTop"android:screenOrientation="port…

【ArcGIS遇上Python】ArcGIS10.8 Python代碼批量完美實現MODIS NDVI數據格式轉換和投影變換

由于論文的需要,將MODIS NDVI數據進行投影變換和格式轉換,具體操作可以參照:《ArcGIS10.8完美實現MODIS NDVI數據格式轉換和投影變換》,但是該文章中的做法只能一次性實現一景影像的轉換,沒法批量,雖然ArcGIS中提供了Batch的方法但是需要挨個添加數據,確定輸出路徑等等,…

引入 DTM 以支持 ABP 的多租戶多數據庫場景

這篇文章分享了使用 DTM 二階段消息模式解決 issue #10036 的方法。今天我們要使用 EasyAbp 的 Abp.EventBus.Boxes.Dtm 模塊。DTM 事件箱的介紹這個模塊使用了 DTM 的 二階段消息 使得 ABP 的事件箱得以支持 多租戶多數據庫場景。你需要先閱讀 DTM 文檔&#xff0c;它將幫助你…

【前端就業課 第一階段】HTML5 零基礎到實戰(六)表格詳解

注意&#xff1a;手機&#xff08;APP&#xff09;打開&#xff0c;內容顯示更佳&#xff0c;不會的私聊博主即可 想要拿代碼或加入學習計劃&#xff08;** 博主會監督你并且教你寫文章 **&#xff09;的拉到最下面&#xff08;PC端Web打開&#xff09;加博主即可&#xff0c;目…

PHP中file_put_contents()函數的兼容性問題

PHP中file_put_contents()函數的兼容性問題 file_put_contents()函數就相當于依次使用fopen()&#xff0c;fwrite()和fclose()&#xff0c;真是個令人愉快的函數。我的第一個PHP小腳本中用到了這個函數&#xff0c;本地運行很正常&#xff0c;放到服務器上去之后點擊submit按鈕…