成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android輕松搞定流動布局

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

[[190928]]

以前我們要實現流動性布局,比較繁瑣,Google開源了一個項目叫FlexboxLayout,相信大家都不陌生。下面我們來學習一下FlexboxLayout基礎知識,并通過一個案例來加深理解。如果你對FlexboxLayout很熟悉,請忽略本文。

1. 什么是 Flexbox

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

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

2. 什么是 FlexboxLayout?

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

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

3. 使用方式

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

  1. compile 'com.google.android:flexbox:0.2.2' 

在xml布局中我們可以這樣使用

  1. <com.google.android.flexbox.FlexboxLayout 
  2.        android:id="@+id/flexbox_layout" 
  3.        android:layout_width="match_parent" 
  4.        android:layout_height="wrap_content" 
  5.        app:flexWrap="wrap"
  6.      <TextView 
  7.        android:id="@+id/tv1" 
  8.        android:layout_width="120dp" 
  9.        android:layout_height="80dp" 
  10.        app:layout_flexBasisPercent="50%" /> 
  11.       <TextView 
  12.        android:id="@+id/tv2" 
  13.        android:layout_width="80dp" 
  14.        android:layout_height="80dp" 
  15.        app:layout_alignSelf="center"/> 
  16.       <TextView 
  17.        android:id="@+id/tv3" 
  18.        android:layout_width="160dp" 
  19.        android:layout_height="80dp" 
  20.        app:layout_alignSelf="flex_end"/> 
  21.    </com.google.android.flexbox.FlexboxLayout> 

代碼中可以這樣使用

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

我們來看平臺熱門專題的布局:

下面我們來實現它,先來看最終實現的效果:

1. 新建activity_flow.xml布局

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     xmlns:app="http://schemas.android.com/apk/res-auto" 
  4.     android:layout_width="match_parent" 
  5.     android:layout_height="match_parent"
  6.     <com.google.android.flexbox.FlexboxLayout 
  7.         android:id="@+id/flexbox_layout" 
  8.         android:layout_width="match_parent" 
  9.         android:layout_height="wrap_content" 
  10.         app:flexWrap="wrap" /> 
  11. </RelativeLayout> 

布局很簡單,只有一個FlexboxLayout 因為我們需要動態創建它的item,所以就在這里固定寫TextView了。

2. 新建ActivityFlow Activity,填充數據源

  1. String[] tags = {"婚姻育兒""散文""設計""上班這點事兒""影視天堂""大學生活""美人說""運動和健身""工具癖""生活家""程序員""想法""短篇小說""美食""教育""心理""奇思妙想""美食""攝影"}; 
  2.         flexboxLayout = (FlexboxLayout) findViewById(R.id.flexbox_layout); 
  3.         for (int i = 0; i < tags.length; i++) { 
  4.             Book model = new Book(); 
  5.             model.setId(i); 
  6.             model.setName(tags[i]); 
  7.             flexboxLayout.addView(createNewFlexItemTextView(model)); 
  8.         } 

其中Book為一個實體,這個不是關鍵,關鍵的是createNewFlexItemTextView方法。

  1. /** 
  2.      * 動態創建TextView 
  3.      * @param book 
  4.      * @return 
  5.      */ 
  6.     private TextView createNewFlexItemTextView(final Book book) { 
  7.         TextView textView = new TextView(this); 
  8.         textView.setGravity(Gravity.CENTER); 
  9.         textView.setText(book.getName()); 
  10.         textView.setTextSize(12); 
  11.         textView.setTextColor(getResources().getColor(R.color.colorAccent)); 
  12.         textView.setBackgroundResource(R.drawable.tag_states); 
  13.         textView.setTag(book.getId()); 
  14.         textView.setOnClickListener(new View.OnClickListener() { 
  15.             @Override 
  16.             public void onClick(View view) { 
  17.                 Log.e(TAG, book.getName()); 
  18.             } 
  19.         }); 
  20.         int padding = Util.dpToPixel(this, 4); 
  21.         int paddingLeftAndRight = Util.dpToPixel(this, 8); 
  22.         ViewCompat.setPaddingRelative(textView, paddingLeftAndRight, padding, paddingLeftAndRight, padding); 
  23.         FlexboxLayout.LayoutParams layoutParams = new FlexboxLayout.LayoutParams( 
  24.                 ViewGroup.LayoutParams.WRAP_CONTENT, 
  25.                 ViewGroup.LayoutParams.WRAP_CONTENT); 
  26.         int margin = Util.dpToPixel(this, 6); 
  27.         int marginTop = Util.dpToPixel(this, 16); 
  28.         layoutParams.setMargins(margin, marginTop, margin, 0); 
  29.         textView.setLayoutParams(layoutParams); 
  30.         return textView; 
  31.     } 

其他有關Book實體和Util類,也貼出來一下

Book實體

  1. public class Book { 
  2.     private int id; 
  3.     private String name
  4.     public String getName() { 
  5.         return name
  6.     } 
  7.     public void setName(String name) { 
  8.         this.name = name
  9.     } 
  10.     public int getId() { 
  11.         return id; 
  12.     } 
  13.     public void setId(int id) { 
  14.         this.id = id; 
  15.     } 
  16.     public Book() { 
  17.     } 

Util工具類

  1. public class Util { 
  2.     public static int pixelToDp(Context context, int pixel) { 
  3.         DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); 
  4.         return pixel < 0 ? pixel : Math.round(pixel / displayMetrics.density); 
  5.     } 
  6.     public static int dpToPixel(Context context, int dp) { 
  7.         DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); 
  8.         return dp < 0 ? dp : Math.round(dp * displayMetrics.density); 
  9.     } 

這樣關于流動布局[FlexboxLayout],我們就實現完成了,是不是很簡單。

【本文為51CTO專欄作者“洪生鵬”的原創稿件,轉載請聯系原作者】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2009-12-11 15:37:58

Linux日志處理

2022-09-16 08:04:25

阿里云權限網絡

2025-02-07 08:39:32

Shell部署測試

2010-09-17 14:04:14

JVM內存設置

2009-10-23 17:51:51

Oracle用戶密碼

2010-06-04 09:08:56

2010-07-27 14:25:02

linux文件編碼

2009-11-12 10:53:57

ADO.NET連接My

2009-09-13 20:28:38

Linq插入數據

2024-08-02 09:00:17

NettyWebSocketNIO

2020-05-11 10:59:02

PythonWord工具

2024-08-09 08:52:26

2016-03-17 17:35:15

云容器虛擬化管理Docker

2009-11-24 15:34:41

DNS服務器組建

2009-08-17 08:45:34

Windows 7文件刪除

2011-05-23 14:15:31

2022-09-29 10:51:18

ShellLinux命令審計

2025-02-26 07:58:41

2011-03-25 09:01:42

Web亂碼

2024-06-06 08:40:07

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品日韩 | 狠狠操操 | 亚洲激情在线 | 亚洲人成人一区二区在线观看 | 中文字幕精品视频在线观看 | 久久久影院 | 亚洲国产一区二区三区在线观看 | 午夜天堂精品久久久久 | 成人1区2区 | 在线欧美视频 | 日韩精品1区2区 | 国产专区视频 | 产真a观专区| 国产专区在线 | av毛片| 91精品无人区卡一卡二卡三 | 国产精品久久久久久久久免费高清 | 亚洲国产精品va在线看黑人 | 国产日韩欧美一区二区在线播放 | 欧美精品片 | 天天草视频 | 欧美亚洲免费 | 欧洲免费毛片 | 亚洲色图综合 | 国产精品久久久久久吹潮 | 亚洲综合一区二区三区 | 天天天天操 | 最近免费日本视频在线 | 国产精品资源在线 | 麻豆av片| 综合久久综合久久 | 日日夜夜精品视频 | 色婷婷综合久久久久中文一区二区 | 一级美国黄色片 | 国内精品久久久久久影视8 最新黄色在线观看 | 97狠狠干| 精品国产乱码久久久久久蜜臀 | 91av视频在线播放 | 91精品国产91久久久久久最新 | 亚洲精品久久久一区二区三区 | 日韩免费视频 |