1. 程式人生 > >淺談android4.0開發之GridLayout佈局

淺談android4.0開發之GridLayout佈局

作者:李響       

     本文重點講述了自android4.0版本後新增的GridLayout網格佈局的一些基本內容,並在此基礎上實現了一個簡單的計算器佈局框架。通過本文,您可以瞭解到一些android UI開發的新特性,並能夠實現相關應用。

       在android4.0版本之前,如果想要達到網格佈局的效果,首先可以考慮使用最常見的LinearLayout佈局,但是這樣的排佈會產生如下幾點問題:

1、不能同時在X,Y軸方向上進行控制元件的對齊。

2、當多層佈局巢狀時會有效能問題。

3、不能穩定地支援一些支援自由編輯佈局的工具。

       其次考慮使用表格佈局TabelLayout,這種方式會把包含的元素以行和列的形式進行排列,每行為一個TableRow物件,也可以是一個View物件,而在TableRow中還可以繼續新增其他的控制元件,每新增一個子控制元件就成為一列。但是使用這種佈局可能會出現不能將控制元件佔據多個行或列的問題,而且渲染速度也不能得到很好的保證。

        android4.0以上版本出現的GridLayout佈局解決了以上問題。GridLayout佈局使用虛細線將佈局劃分為行、列和單元格,也支援一個控制元件在行、列上都有交錯排列。而GridLayout使用的其實是跟LinearLayout類似的API,只不過是修改了一下相關的標籤而已,所以對於開發者來說,掌握GridLayout還是很容易的事情。GridLayout的佈局策略簡單分為以下三個部分:

首先它與LinearLayout佈局一樣,也分為水平和垂直兩種方式,預設是水平佈局,一個控制元件挨著一個控制元件從左到右依次排列,但是通過指定android:columnCount設定列數的屬性後,控制元件會自動換行進行排列。另一方面,對於GridLayout佈局中的子控制元件,預設按照wrap_content的方式設定其顯示,這隻需要在GridLayout佈局中顯式宣告即可。

      其次,若要指定某控制元件顯示在固定的行或列,只需設定該子控制元件的android:layout_row和android:layout_column屬性即可,但是需要注意:android:layout_row=”0”表示從第一行開始,android:layout_column=”0”表示從第一列開始,這與程式語言中一維陣列的賦值情況類似。

       最後,如果需要設定某控制元件跨越多行或多列,只需將該子控制元件的android:layout_rowSpan或者layout_columnSpan屬性設定為數值,再設定其layout_gravity屬性為fill即可,前一個設定表明該控制元件跨越的行數或列數,後一個設定表明該控制元件填滿所跨越的整行或整列。

利用GridLayout佈局編寫的簡易計算器程式碼如下(注意:僅限於android4.0及以上的版本):

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:rowCount="5"
    android:columnCount="4" >
  <Button
    	android:id="@+id/one"
    	android:text="1"/>
  <Button
    	android:id="@+id/two"
    	android:text="2"/>
   <Button
    	android:id="@+id/three"
    	android:text="3"/>
  <Button
    	android:id="@+id/devide"
    	android:text="/"/>
  <Button
    	android:id="@+id/four"
    	android:text="4"/>
  <Button
    	android:id="@+id/five"
    	android:text="5"/>
  <Button
    	android:id="@+id/six"
    	android:text="6"/>
  <Button
    	android:id="@+id/multiply"
    	android:text="×"/>
  <Button
    	android:id="@+id/seven"
    	android:text="7"/>
  <Button
    	android:id="@+id/eight"
    	android:text="8"/>
  <Button
    	android:id="@+id/nine"
    	android:text="9"/>
	<Button
    	android:id="@+id/minus"
    	android:text="-"/>
	<Button
    	android:id="@+id/zero"
		android:layout_columnSpan="2"
		android:layout_gravity="fill"
    	android:text="0"/>
  <Button
    	android:id="@+id/point"
    	android:text="."/>
	<Button
    	android:id="@+id/plus"
		android:layout_rowSpan="2"
		android:layout_gravity="fill"
    	android:text="+"/>
	<Button
    	android:id="@+id/equal"
		android:layout_columnSpan="3"
		android:layout_gravity="fill"
    	android:text="="/> 
  </GridLayout>

最終實現的介面如下所示:



相關推薦

android4.0開發GridLayout佈局

作者:李響             本文重點講述了自android4.0版本後新增的GridLayout網格佈局的一些基本內容,並在此基礎上實現了一個簡單的計算器佈局框架。通過本文,您可以瞭解到一些android UI開發的新特性,並能夠實現相關應用。        在

響應式開發與自適應佈局

談到響應式,大家不自覺的會想到什麼? 首先映入眼簾的便是隨著網頁寬度變化而網頁內容呈現出不同內容的效果!那麼由來是什麼呢? 2009時間段,網際網路發生了一件天大的事情! 那就是在北京時間2009年6月9日凌晨2:48分,在美國舊金山MosconeWest

android6.0的新特性執行時許可權處理解析

一.相關介紹 新的許可權機制更好的保護了使用者的隱私,Google將許可權分為兩類,一類是Normal Permissions,這類許可權一般不涉及使用者隱私,是不需要使用者進行授權的,比如手機震動、訪問網路等;另一類是Dangerous Permission

C/C++ 開發Excel外掛任務窗格

 Excel的任務窗格非常友好,開發Excel也避免不了,Choice在其外掛實現了彈出對話方塊和任務窗格供使用者選擇。 如何在C++中建立任務窗格呢。 1.在CConnect類中新增ICustomTaskPaneConsumer介面,方法同前 修改為public IDis

軟件開發項目如何實現精益生產

社交 難題 系統結構 以及 人員 理論 依次 開始 精確 精益生產(LeanProduction),簡稱“精益”,是衍生自豐田生產方式的一種管理哲學。精益生產是通過系統結構、人員組織、運行方式和市場供求等方面的變革,使生產系統能很快適應用戶需求不斷變化,並能使生產過程中一切

ISO協議棧OSI七層模型

osi一、開放系統互連參考模型 (Open System Interconnect 簡稱OSI)是國際標準化組織(ISO)和國際電報電話咨詢委員會(CCITT)聯合制定的開放系統互連參考模型,為開放式互連信息系統提供了一種功能結構的框架。它從低到高分別是:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應

web前端開發

非主流 寫代碼 人員 使用 actions css3 認識 ont 高效 我個人認為前端攻城獅其實就是編程技術人員,用一句話來形容“比UI設計懂技術,比技術人員更懂交互”,當然也有人說前端工程師是工程師中的設計師,是設計師中的工程師。既然是編程工作,那就不會做一輩子,畢竟太

【Unity遊戲開發Unity遊戲開發中的單元測試

可靠 屬於 sin 自定義類型 允許 ogr 兩個 階段 ast 一、單元測試的定義與作用   單元測試定義:單元測試在傳統軟件開發中是非常重要的工具,它是指對軟件中的最小可測試單元進行檢查和驗證,一般情況下就是對代碼中的一個函數去進行驗證,檢查它的正確性。一個單元測試是

js設計模式發布 — 命令模式

刪除 常見 設計程序 體會 span 一個 發送 正在 是什麽 命令模式最常見的應用場景是:有時候需要向某些對象發送請求,但是並不知道請求的接收者是誰,也不知道被請求的操作是什麽。此時希望用一種松耦合的方式來設計程序,使得請求發送者和請求接收者能夠消除彼此之間的耦合關系。

關於Python開發工程師前景廣闊的原因

Python編程 Python代碼學習 Python學習教程 入門Python Python前景 在目前生活中,隨著互聯網科技飛速的發展和進步,越來越多想要學習一門IT程序開發技術,而2018年Python已經成為一種再主流不過的編程語言了,其實Python很早以前就有這麽語言,它的第一個

數據庫存儲過程

urn 數據 優化 tables named varchar 權限 def 來看 什麽是存儲過程 如果你接觸過其他的編程語言,那麽就好理解了,存儲過程就像是方法一樣。竟然他說方法那麽他就有類似的方法名,方法要傳遞的變量和返回結果,所以存儲過程有存儲過程名有存儲過程參數也有返

vue2.0生命週期

beforeCreate :元件例項剛被建立,元件屬性計算之前,如data屬性等 <template> <div class="router-page-wrap" style="background: #fc595d;"> this is user

webpack4.0 效能優化

原文連結:https://blog.csdn.net/yuanyang08/article/details/84324331 前言:在現實專案中,我們可能很少需要從頭開始去配置一個webpack 專案,特別是webpack4.0釋出以後,零配置啟動一個專案成為一種標配。正因為零配置的webpack對專

軟件測試數據校驗

註冊 req 地方 數據 from 怎麽辦 完整 tab 大洋 註明:DBCheck即數據庫數據校驗;一.為什麽需要DBCheck?你同學去年向你借了一萬大洋,今天你打電話想他還錢給你,老同學很大方的給你說馬上給你打到銀行卡上。一會兒,回電話給你說,錢已經全部打到你銀行卡了

Spark2.2.0開發maven配置

基於maven的spark開發配置。可根據專案情況,調節spark.version和scala.version即可。 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.o

JFinal原始碼,短小精悍

前言 這篇文章的前提是對JFnial有了大致的瞭解,不熟悉的話可以看一下官網文件https://www.jfinal.com/doc,非常簡單的一個框架,回到原題,老大說有一個JFinal的專案以後有可能讓我維護,於是讓我熟悉一下JFinal的原理,看了JFinal的官網文件和原始碼才發現JFinal真是短

android開發-相對佈局的屬性

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

測試驅動開發(TDD)

在 IBM Bluemix 雲平臺上開發並部署您的下一個應用。 背景 一個高效的軟體開發過程對軟體開發人員來說是至關重要的,決定著開發是痛苦的掙扎,還是不斷進步的喜悅。國人對軟體藍領的不屑,對繁瑣冗長的傳統開發過程的不耐,使大多數開發人員無所適從。最近興起的一些軟體開發過程相關的技術,提供一些比較高效、

ArcGIS移動開發中的基本變數(1):MapView、Map、Layers、GraphicsOverlay

一、MapView  二、Map        Map,程式設計中即ArcGISMap,可譯為地圖物件,主要用來承載地圖資料,ArcGISMap包含製圖資料圖層以及其它能夠定義地圖資訊的資料(例如basemaps底圖、popups彈出視窗、renderer渲染

路徑規劃演算法Dijkstra演算法

 迪傑斯特拉(dijkstra)演算法是典型的用來解決最短路徑的演算法,也是很多教程中的範例,由荷蘭電腦科學家狄克斯特拉於1959年提出,用來求得從起始點到其他所有點最短路徑。該演算法採用了貪心的思想,每次都查詢與該點距離最的點,也因為這樣,它不能用來解決存在負權邊的圖。解