Android01-佈局篇

来源:http://www.cnblogs.com/pengyan-9826/archive/2017/08/14/7356986.html
-Advertisement-
Play Games

在Android中,共有五種佈局方式,分別是:LinearLayout(線性佈局),FrameLayout(幀佈局),AbsoluteLayout(絕對佈局),RelativeLayout(相對佈局), TableLayout(表格佈局);還有一種,是在Android4.0以後出現的新佈局:Grid ...


 

     在Android中,共有五種佈局方式,分別是:LinearLayout(線性佈局),FrameLayout(幀佈局),AbsoluteLayout(絕對佈局),RelativeLayout(相對佈局),

TableLayout(表格佈局);還有一種,是在Android4.0以後出現的新佈局:GridLayout(網袋佈局)。下麵簡單介紹一下每個佈局的特點。

 

    一.線性佈局:簡單來說,這個佈局就像它的名字一樣,裡面所有的控制項的擺放方式都是像直線一樣的擺放方式。要麼垂直,要麼水平。垂直或水平可以通過設置

android:orientation="vertical"屬性來確定控制項的擺放方式;vertical代表垂直,horizontal代表水平。當垂直佈局時,每一行就只有一個控制項,多個控制項依次垂直往下;

水平佈局時,只有一行,每一個控制項依次向右排列。

LinearLayout裡面還有一個特別的屬性:android:layout_weight="1",這是設置控制項的權重。舉個列子:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="temp.com.androidtouch.MainActivity">


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按鈕1"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按鈕2"/>

</LinearLayout>

 

 

這是一個線性佈局,裡面控制項的屬性還沒有給上權重,效果圖如下:

當我給控制項設置了權重之後:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="temp.com.androidtouch.MainActivity">


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按鈕1"
        android:layout_weight="1"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按鈕2"
        android:layout_weight="3"/>

</LinearLayout>

效果圖如下:

 

當我們設置了控制項的權重之後,控制項在整個佈局裡面所占的比例將會根據權重比來分配,權重是可以給小數的,但是我們基本上不會給。

權重是LinearLayout佈局里的屬性,其他的佈局中不能使用。

 

 

 

      二.幀佈局:這是幾個佈局中最簡單的一個佈局,它會為每個添加進去的控制項創建單獨的幀,但是幀佈局的擺放控制項的方式是覆蓋式的,就拿這段代碼來說:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="temp.com.androidtouch.MainActivity">


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按鈕1"
        android:layout_weight="1"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按鈕2"
        android:layout_weight="3"/>

</FrameLayout>

當我把佈局改為幀佈局時

兩個按鈕就會重合在一起,第二個按鈕會覆蓋在第一個按鈕之上。這就是幀佈局唯一的特點。

 

      三.絕對佈局: AbsoluteLayout這個佈局方式很簡單,主要屬性就兩個: layout_xlayout_y       控制項依靠這兩個屬性來定義自己在佈局中的X坐標和Y坐標。 以屏幕左上角為(0,0)的坐標軸的x,y值,當向下或向右移動時,坐標值將變大。AbsoluteLayout允許元素之間互相重疊。我們通常不推薦使用 AbsoluteLayout,因為AbsoluteLayout寫出來的佈局在不同的設備上使用時會變形,然後佈局就會很醜。

 

 

    四.相對佈局: RelativeLayout可以理解為某一個控制項為參照物,來定位的佈局方式,基本屬性如下圖:

 

 

 

        五.表格佈局:TableLayout類似Html裡面的Table。每一個TableLayout裡面有表格行TableRowTableRow裡面可以具體定義每一個控制項。每個TableRow都會定義成一行。簡單來說,TableLayout就是以一個<TableLayout></TableLayout>標簽和多個<TableRow></TableRow>標簽組成。佈局裡面有兩個屬性,一是 android:shrinkColumns="1"表示某列被收縮,另一個是android:stretchColumns="0"表示某列被拉伸,還有一個android:collapseColumns=""表示某列被隱藏。當然,在TableLayout裡面可以合併行和和併列。

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="表一 全局設置:列屬性設置" />

    <TableLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:shrinkColumns="1"
        android:stretchColumns="0">

        <TableRow>

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="該列可伸展" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="該列可收縮" />
        </TableRow>

        <TableRow>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="我像行方向伸展,我可以很長很長很長很長" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="我像列方向收縮,我可以很短很短很短很短" />
        </TableRow>
    </TableLayout>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="表二 單元格設置:指定屬性單元格" />

    <TableLayout
        android:layout_width="350dp"
        android:layout_height="wrap_content"
        android:shrinkColumns="0,2"
        android:stretchColumns="1"
        >

        <TableRow>

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="第0列" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="第1列" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="第2列" />

        </TableRow>

        <TableRow>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:text="我被指定在第一列" />
        </TableRow>

        <TableRow>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:layout_span="2"
                android:text="我跨1列和2列 不信你看"
                />
        </TableRow>
    </TableLayout>



</LinearLayout>

   這是一個包含TableLayout里基本的屬性的列子,效果圖如下:

               五個佈局簡單介紹完了,就只剩下最後一個,網袋佈局。網袋佈局較為靈活,基本屬性如下圖:

  再舉個用GridLayout寫的比較簡單的例子:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnCount="4"
    android:orientation="horizontal"
    android:rowCount="6">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="2" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="3" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="/" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="4" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="5" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="6" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="*" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="7" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="8" />



    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="9" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="-" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0"
        android:layout_columnSpan="2"
        android:layout_gravity="fill_horizontal"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="." />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="+"
        android:layout_rowSpan="2"
        android:layout_gravity="fill_vertical"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="="
        android:layout_columnSpan="3"
        android:layout_gravity="fill_horizontal"/>


</GridLayout>

效果圖如下:

 

 佈局就做了下簡單的介紹,深入瞭解還是的靠自己。

第一次寫博客,有很多考慮不周的地方,望各位博友多多指教。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 若是沒有對編輯器做任何配置直接添加圖片的話,顯示的html內容如下圖所示:它會顯示出原圖片尺寸 所以必須要對圖片的初始顯示尺寸做控制:ueditor文件中找到image.js文件 在image.js中找到如下圖所示: 在此處添加上所要想顯示的尺寸! http://ueditor.baidu.com/ ...
  • 假如面試回答js的運行機制時,你可能說出這麼一段話:“Javascript的事件分同步任務和非同步任務,遇到同步任務就放在執行棧中執行,而碰到非同步任務就放到任務隊列之中,等到執行棧執行完畢之後再去執行任務隊列之中的事件。”但你能說出背後的原因嗎? 先理解相關概念 線程與進程 進程:是系統資源分配和調度 ...
  • 剛學習angularJS,於是練習寫了一個類似於購物車的全選/取消全選的功能,主要實現的功能有: 1、勾選全選checkbox,列表數據全部被勾選,取消同理,用ng-model實現雙向綁定; 2、選中列表中的所有checkbox,全選也會被勾選;(這裡我想到的方法是給每一個對象增加checked欄位 ...
  • 先從一個小題目開始: 以下代碼的輸出結果是? 下麵還有加強版: // 2 function test2(value) { value = value || 'default 2'; console.log(value); } setTimeout(test2, 1000, 2.1); // T2-1 ...
  • 一.JavaScript介紹 JavaScript又被稱為js,主要負責瀏覽器的動畫等效果.現在一般瀏覽器都相容js(IE6.7.8可能不相容某些用法)。 二.JS常用語句 1.document.write(); 能夠直接用與HTML輸出流,就是說能夠直接在網頁中進行內容輸出。 實例: 2.aler ...
  • js數字滑動時鐘: ...
  • JavaScript表單 這篇文章的主要目的是介紹表單相關的知識,如表單基礎知識、文本框腳本相關用法、選擇框腳本相關用法以及等知識。雖然在現代web開發中,很少會使用form預設行為提交表單數據,而是會禁用預設行為,然後使用Ajax方式通過POST請求非同步提交表單數據。但是這並不代表form表單不重 ...
  • 轉自:http://www.cnblogs.com/linhaixin/p/5581939.html 獲取(代碼): 修改(代碼): ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...