1. 程式人生 > >Android開發之常用佈局全在這篇!

Android開發之常用佈局全在這篇!

一、簡介

如下圖所示,按照介面編寫的方式,可以分為傳統佈局和新型佈局兩種。

**1.線性佈局:**是平常練習demo時最常用的佈局,分為水平、垂直方向兩種線性佈局,即設定其屬性orientation:"vertical或horizontal"。【注:在不指定方向時,預設為horizontal,即水平方向】

**2.相對佈局:**依據某一控制元件的位置,來確定另一控制元件的位置,即另一控制元件相對於當前控制元件的位置。

**3.表格佈局:**適用於多行多列的佈局方式,通過表格方式來佈局控制元件的位置,並且每個TableLayout由多個TableRow(表示行)組成。

**4.網格佈局:**是在Android4.0之後引入的一個新佈局,和上面的TableLayout有點類似,但GridLayout比TableLayout更加好用、靈活。

**5.幀佈局:**放入的所有控制元件都會被依次放在左上區域,因此下一個控制元件會重疊覆蓋上一個控制元件,且無法為控制元件指定一個確切的位置。一般用於瀏覽單張圖片。

**6.絕對佈局:**這個佈局一般不會使用。螢幕的左上角為原點(0,0),橫軸為x軸且向右為遞增,縱軸為y軸且向下為遞增,依據layout_x及layout_y屬性分別設定控制元件的X及Y座標。

**7.約束佈局:**先說一下約束佈局相對於傳統佈局的優勢:①採用視覺化的介面,拖拽控制元件即可完成介面的佈局;②解決佈局巢狀過多的問題,採用約束的方式來指定各個控制元件的位置和關係的,它有點類似於RelativeLayout,但遠比RelativeLayout要更強大。

二、常用屬性

2.1 所有佈局的公有屬性

2.2 各個佈局的特有屬性

2.2.1 線性佈局

  • 在不指定線性佈局方向的情況下,預設採用水平佈局。

  • 為了完全按比例分配剩餘空間,我們一般將控制元件的layout_width或layout_height設定為0dp,然後分別設定其權重值。【這裡僅考慮常用的,至於寬設定為wrap_content或match_parent請自行嘗試即可】

例:水平方向上有3個TextView,設定權重為1:1:1,則程式碼如下:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"><!--不指定方向的情況下預設為水平方向-->

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="#00FF7F"
            android:text="text1" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="#00BFFF"
            android:text="text2" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="#FA8072"
            android:text="text3" />
    </LinearLayout>

執行結果如下:

將權重比例改為1:2:3,執行結果如下。

2.2.2 相對佈局

2.2.3 表格佈局

例:xml佈局程式碼如下:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    tools:context=".TableLayoutActivity">

    <TextView
        android:layout_height="wrap_content"
        android:background="#ff1493"
        android:text="我獨佔一行" /><!--這裡的文字框沒有設定寬度,預設為父容器的寬度-->

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button android:text="button1" />

        <Button android:text="btn2" />

        <Button android:text="button3" />
    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <!--設定layout_column屬性,這裡是跳過第1列,從第2列開始放置控制元件-->
        <Button
            android:layout_column="1"
            android:text="button44444" /><!--該按鈕文字最長,決定了該列的寬度-->

        <Button android:text="b5" />
    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button android:text="button6" />
    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <!--設定layout_span屬性,這裡是合併3個單元格,即該按鈕佔3個單元格-->
        <Button
            android:layout_span="3"
            android:text="button7" />

        <Button android:text="button8" />
    </TableRow>

</TableLayout>

執行結果如下:

由上面的演示可以看出:

  1. 如果直接在TableLayout中新增控制元件,則該控制元件將佔滿一行,如第一行的文字框獨佔一行。

  2. 若要在一行上放置多個控制元件,則需要在控制元件的外層新增一個TableRow容器,如第2、3、4、5行放置了不同個數的的按鈕。

  3. TableRow容器中控制元件的個數決定了該行有多少列(如圖分別有1,3,2,1,2列),而TableLayout的列數由控制元件最多的TableRow決定(整個佈局有3列)。

  4. TableLayout的列的寬度由該列中最寬的單元格決定,如Button44444按鈕決定了第二列的寬度。

  5. 設定layout_column屬性,這裡是跳過第1列,從第2列開始放置控制元件。

  6. 設定layout_span屬性,這裡是合併3個單元格,即該按鈕佔3個單元格。

請依次新增新增以下佈局屬性: ① 收縮1、2列:

android:shrinkColumns="0,1"

執行結果如下:顯示不完全的button8顯示完全了,並且Button1、Button44444、Button6按鈕有收縮。

②隱藏第1列:

android:collapseColumns="0"

執行結果如下:由於第4行僅有一個按鈕,則整個第四行隱藏。

③ 伸展第3列:

android:stretchColumns="2"

執行結果如下:由於僅有第2、3行有第三列,並且Button3與B5有拉伸。

2.2.4 網格佈局 GridLayout相關屬性如下:

2.2.5 幀佈局

  • 幀佈局是這幾種佈局中最簡單的佈局,新增到其中的控制元件預設會放到佈局區域的左上角;

  • 幀佈局沒有任何的定位方式,後一個控制元件會覆蓋前一個控制元件;

  • 幀佈局的大小有控制元件中最大的控制元件決定;

注:設定前景影象的位置可以兩個屬性疊加,例如右下角:bottom|right。

2.2.6 絕對佈局 絕對佈局很少使用,一般有兩個常用控制元件屬性:

2.2.7 約束佈局 約束佈局是Google推薦的一種佈局,有關於其拖拽控制元件、新增約束、藉助Inspector設定屬性、Gidelines的使用以及自動新增約束的功能

最後

如果你看到了這裡,覺得文章寫得不錯就給個讚唄!歡迎大家評論討論!如果你覺得那裡值得改進的,請給我留言。一定會認真查詢,修正不足,定期免費分享技術乾貨。感興趣的小夥伴可以點一下關注哦。謝謝!

相關推薦

Android開發常用佈局

一、簡介 如下圖所示,按照介面編寫的方式,可以分為傳統佈局和新型佈局兩種。 **1.線性佈局:**是平常練習demo時最常用的

Android開發漫漫長途 番外——自定義View的各種姿勢2

是個 pub water 常用 getchild mod one 它的 sdn 該文章是一個系列文章,是本人在Android開發的漫漫長途上的一點感想和記錄,我會盡量按照先易後難的順序進行編寫該系列。該系列引用了《Android開發藝術探索》以及《深入理解Android 卷

Android開發漫漫長途 番外——內存泄漏分析與解決

set 程序 靜態 內存 ins clas back undle 介紹 該文章是一個系列文章,是本人在Android開發的漫漫長途上的一點感想和記錄,我會盡量按照先易後難的順序進行編寫該系列。該系列引用了《Android開發藝術探索》以及《深入理解Android 卷Ⅰ,Ⅱ,

android開發-相對佈局的屬性

// 相對於給定ID控制元件 android:layout_above 將該控制元件的底部置於給定ID的控制元件之上; android:layout_below 將該控制元件的底部置於給定ID的控制元件之下; android:layout_toLeftOf    將該控制元

Android開發線性佈局(LinearLayout)

老的Api(2.2或者2.3的)有五種佈局: LinearLayout線性佈局,Relative Layout相對佈局,AbsoluteLayout絕對位置佈局,FrameLayout幀佈局,TableLayout表格佈局 而在最新的Api中只有兩種佈局:LinearLa

AndroidAndroid開發常用的loading等待效果實現,仿微博等待動畫。兩種實現方式詳解

長期維護的Android專案,裡面包括常用功能實現,以及知識點詳解, 當然還有Java中的知識點。 具體請看github:https://github.com/QQ986945193/DavidAndroidProjectTools 首先大家都知道,當我

Android開發UI佈局優化全面總結

Android開發最常見的問題之一是螢幕碎片化太嚴重,所以我們在寫佈局的時候儘量不能適應硬編碼去佈局。 佈局優化在開發過程中起到至關重要的作用。 1.合用weightSum屬性和layout_weig

Android開發GreenDao(進階

1、資料庫升級 原理:建立臨時表-->刪除原表-->建立新表-->複製臨時表資料到新表並刪除臨時表;這樣就實現資料庫表的更新了 新建一個數據庫更新輔助類 MigrationHelper public class MigrationHelper {

Android開發常用第三方庫混淆欄位

在Android開發中, 經常使用別人的第三方庫, 開發完成後, 我們需要對apk進行壓縮, 混淆, 這樣別人就很難看懂你的程式碼了, 就算反編譯過來也看不懂(大牛除外). 下面收集一些目前我正在使用的混淆欄位, 我有個專案apk是10M, 壓縮混淆後只有3.4

安卓學習筆記 -- (安裝環境) Android Studio安裝配置、環境搭建詳細步驟及基本使用 Android Studio和SDK官方開發工具下載 Android Studio教程從入門到精通 Android開發-第一個程式:HelloWorld

1、下載Android Studio安裝配置、環境搭建詳細步驟及基本使用    https://www.cnblogs.com/yanglh6-jyx/p/Android_AS_Configuration.html https://blog.csdn.net/k491022087/ar

Android開發顯示(弄懂ppi、dpi、pt、px、dp、dip、sp之間的關係看就夠了)

版權申明】非商業目的註明出處可自由轉載 博文地址:https://blog.csdn.net/ShuSheng0007/article/details/85165773 出自:shusheng007 文章目錄 概述 要解決的疑問 概念篇

【入門ANDROID開發BUG專講

world 自然 執行 類型 效率 str 積累 全部 href 話說諸葛亮是一個優秀的程序員,每個錦囊都是應對不同的case而編寫的。可是優秀的程序員也敵只是更優秀的bug。六出祈山。七進中原,鞠躬盡瘁,死而後已的諸葛亮僅僅由於有一

Python開發路 【第八】:面向對象編程設計與開發(2)

ssi pen 解析 執行 示例 動態 類型 put 所有 一、繼承與派生 什麽是繼承? 繼承指的是類與類之間的關系,是一種什麽是什麽的關系,繼承的功能之一就是用來解決代碼重用問題。 繼承是一種創建新的類的方式,在python中,新建的類可以繼承一個或多個父類,父類又可以成

Python開發常用模塊

com 與操作 local 顯示 跨語言 exit 參數 osi .section No.1 sys sys模塊是與Python解釋器交互的一個接口 sys.argv 命令行參數List,第一個元素是程序本身路徑 sys.exit(n) 退出程序,正常退出時exit(0)

Android開發基本控制元件和詳解四種佈局方式

Android中的控制元件的使用方式和iOS中控制元件的使用方式基本相同,都是事件驅動。給控制元件新增事件也有介面回撥和委託代理的方式。今天這篇部落格就總結一下Android中常用的基本控制元件以及佈局方式。說到佈局方式Android和iOS還是區別挺大的,在iOS中有F

android開發四種基本佈局

1.LinerLayout 又稱線性佈局 特有屬性: layout_weight按照比例指定控制元件大小 2.RelativeLayout 又稱相對佈局 常用屬性: <ImageView android:id="@+id/imageViews"

Android開發RecyclerView實現流式佈局

RecyclerView是什麼? RecycleView的出現, 替代了ListView, 沒了OnitemClickListener,; LayoutManager負責計算佈局; Adapter 負責適配,還增加了ViewHolder;RecycleView

Android開發RecyclerView的使用

轉自 http://blog.csdn.net/dmk877/article/details/50816933 之後,谷歌公司推出了RecylerView控制元件,RecylerView,我想看到一個新名詞後大部分人會首先發出一個疑問,recylervie

Android開發流式標籤佈局

1、流式佈局的特點以及應用場景    特點:當上面一行的空間不夠容納新的TextView時候,才開闢下一行的空間。主要用於關鍵詞搜尋或者熱門標籤等場景。 2、自定義ViewGroup,重點重寫下面兩個方法     (1) onMeasure:測量子view的寬高,設

Android開發玩轉FlexboxLayout佈局

在這之前,我曾認真的研究過鴻洋大神的Android 自定義ViewGroup 實戰篇 -> 實現FlowLayout,按照大神的思路寫出了一個流式佈局,所有的東西都是難者不會會者不難,當自己能自定義流式佈局的時候就會覺得這東西原來很簡單了。如果各位小夥伴也看過那篇文章的