Android應用開發—LayoutParams的用法

Android應用開發—TextView的動態創建 這篇文章講到了“TextView控件布局位置的控制”,主要依賴于RelativeLayout.LayoutParams的使用,本文簡單介紹下LayoutParams的用法

注:本文大部分內容參考android,利用layoutParams代碼動態布局空間位置和總結:代碼中添加LinearLayout和RelativeLayout布局 或者是一份copy,之所以這里重新“寫”一遍,主要是那篇文章的樣式布局,實在有點不太好看。

LayoutParams介紹:

LayoutParams繼承于Android.View.ViewGroup.LayoutParams。LayoutParams相當于一個Layout的信息包,它封裝了Layout的位置、高、寬等信息。假設在屏幕上一塊區域是由一個Layout占領的,如果將一個View添加到一個Layout中,最好告訴Layout用戶期望的布局方式,也就是將一個認可的layoutParams傳遞進去。

可以這樣去形容LayoutParams,在象棋的棋盤上,每個棋子都占據一個位置,也就是每個棋子都有一個位置的信息,如這個棋子在4行4列,這里的“4行4列”就是棋子的LayoutParams。

但LayoutParams類也只是簡單的描述了寬高,寬和高都可以設置成三種值:

  • 一個確定的值。
  • MATCH_PARENT,即填滿(和父容器一樣大小)。
  • WRAP_CONTENT,即包裹住組件就好。
setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

上面的代碼其實是子對父的,也就是說,父布局下的子控件要設置這句話。
因為布局很多,雖然都繼承至ViewGroup但是各個布局還是有很大的不同。
很顯然上面這句應該這樣寫才算準確:

setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT,TableRow.LayoutParams.FILL_PARENT));

這表示這個子控件的父布局是一個TableRow, 這樣的LayoutParams 太多,所以應明確指明。

下面分別說下兩個常用到布局:

  • FrameLayout下動態設置子控件居中,動態用JAVA代碼要這樣實現:
FrameLayout.LayoutParams lytp = new FrameLayout.LayoutParams(80,LayoutParams.WRAP_CONTENT);
lytp.gravity = Gravity.CENTER;
btn.setLayoutParams(lytp);
  • RelativeLayout下動態設置子控件居中:
RelativeLayout.LayoutParams lp=new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE); 
lp.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); 
btn1.setLayoutParams(lp);

在ANDROID 開發中,有時候我們需要在后臺動態添加布局文件,這里我們來說一下后臺添加LinerLayout布局和RelativeLayout文件的方式:

LinearLayout 布局:

線性布局,組件以垂直或水平方向線性排列。 android.widget.LinearLayout有個繼承自android.view.ViewGroup.LayoutParams 的內嵌類LayoutParams,使用這個類的實例調用 LinearLayout.addView 就可以實現“線性布局”。

首先我們需要定義一個LinearLayout的布局參數params,如下:

  • 方式一:指定高、寬
LinearLayout.LayoutParams params = new LinearLayout.LayoutParam(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)
  • 方式二:指定高、寬、權重,其中LayoutParams中的兩個參數分別為:子控件的高、寬。
LinearLayout.LayoutParams params = new LinearLayout.LayoutParam(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT, weight)

設置控件相對于容器本身的位置:

LinearLayout.LayoutParams.gravity = 
Gravity.NO_GRAVITY/Gravity.TOP/Gravity.BOTTOM/Gravity.LEFT/Gravity.RIGHT

RelativeLayout布局:

RelativeLayout布局,是以“相對”位置/對齊為基礎的布局方式。android.widget.RelativeLayout 有個繼承自android.view.ViewGroup.LayoutParams 的內嵌類 LayoutParams,使用這個類的實例調用 RelativeLayout.addView 就可以實現“相對布局”。

首先我們需要定義一個 RelativeLayout的布局參數relLayoutParams,如下:

RelativeLayout.LayoutParams relLayoutParams=new RelativeLayout.LayoutParam(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)

其中LayoutParams中兩個參數分別為:子控件的寬(width),子控件的高(height),除了可以為LayoutParams.FILL_PARENT(android.view.ViewGroup.LayoutParams)等系統常量外還可以是數值,比如400。

  • 通過LayoutParams的 addRule方法來額外的添加別的規則:
android.widget.RelativeLayout.LayoutParams.addRule(int verb, int anchor)

其中 anchor 參數指定可以是 View 的 id(“相對于誰”)。RelativeLayout.TRUE(啟用某種對齊方式)或者是-1(應用于某些不需要 anchor 的 verb)[因為 RelativeLayout.TRUE的值為 -1 ,所以-1或者RelativeLayout.TRUE都是可以是 0 (不啟用這個規則)

其中 verb 參數指定相對的“動作”:
1. 如果是相對于父控件的相對布局的話 anchor 參數可以不用或者設置為-1或者RelativeLayout.TRUE。
2. 如果是相對于級別和自己同一級的控件的話參數設置應該是 view 的id。
3. 如果參數設置為 0 的話,則表示這個規則不會運用到該控件的布局中,當是相對于本身的父控件的時候這個參數可以省略。
eg:

relLayoutParams.addRule(RelativeLayout.ABOVE,imageViewId.getId())    
// 子控件相對于控件:imageViewId在其的上面
relLayoutParams.addRule(RelativeLayout.BELOW ,imageViewId.getId())  
// 子控件相對于控件:imageViewId在其的下面
relLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, -1) 與
relLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE) 與
relLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT )  
// 表示的是一樣的表示子控件在父控件的右邊
// 離某元素的左、上、右、下的距離單位
relLayoutParams.setMargins(arg0, arg1, arg2, arg3) relLayoutParams.topMargin=5

RelativeLayout的相關變量:

relLayoutParams.alignWithParent=true   如果對應的兄弟元素找不到的話就以父元素做參照物
RelativeLayout.CENTER_HORIZONTAL   在父控件中水平居中
RelativeLayout.CENTER_VERTICAL   在父控件中垂直居中
RelativeLayout.CENTER_IN_PARENT  相對于父控件完全居中
RelativeLayout.ALIGN_PARENT_BOTTOM  緊貼父控件的下邊緣
RelativeLayout.ALIGN_PARENT_TOP  緊貼父控件的上邊緣
RelativeLayout.ALIGN_PARENT_LEFT 緊貼父控件的左邊邊緣
RelativeLayout.ALIGN_PARENT_RIGHT  緊貼父控件的右邊緣RelativeLayout.ABOVE  在某元素的上方  需要第二個參數為某元素的ID
RelativeLayout.BELOW 在某元素的下方  需要第二個參數為 某元素的ID
RelativeLayout.LEFT_OF  在某元素的左邊  需要第二個參數為某元素的ID
RelativeLayout.RIGHT_OF  在某元素的右邊  需要第二個參數為 某元素的ID
RelativeLayout.ALIGN_TOP 本元素的上邊緣和某元素的的上邊緣對齊 需要第二個參數為某元素的ID
RelativeLayout.ALIGN_BOTTOM  本元素的上邊緣和某元素的的下邊緣對齊 需要第二個參數為某元素的ID
RelativeLayout.ALIGN_LEFT  本元素的上邊緣和某元素的的左邊緣對齊 需要第二個參數為某元素的ID
RelativeLayout.ALIGN_RIGHT  本元素的上邊緣和某元素的的右邊緣對齊 需要第二個參數為某元素的ID
RelativeLayout.ALIGN_BASELINE    本元素的基線和某元素的的基線對齊 需要第二個參數為某元素的ID

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

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

相關文章

廖雪峰Java1-2程序基礎-7布爾運算符

布爾運算符 關系運算符&#xff1a;>&#xff0c; >&#xff0c; <&#xff0c; <&#xff0c; &#xff0c;!與運算 &&或運算 |非運算 &#xff01;int n 5;boolean t n > 0;//trueboolean f n < 0;//falseboolean isFive n 5;//trueboolean i…

第二十一屆國際C語言混亂代碼大賽結果公布

摘要&#xff1a;國際C語言混亂代碼大賽&#xff08;IOCCC, The International Obfuscated C Code Contest&#xff09;是一項著名的國際編程賽事&#xff0c;從1984年開始到2006年&#xff0c;每年舉辦一次。2006年后中止了多年&#xff0c;2011年又開始恢復。比賽的目的是寫出…

QuartZ Cron表達式

CronTrigger 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 CronTriggers往往比SimpleTrigger更有用&#xff0c;如果您需要基于日歷的概念&#xff0c;而非SimpleTrigger完全指定的時間…

maven02-----Maven項目構建的初次使用

一. 創建Maven項目 1.1 建立一個Hello項目 當然也可以通過java project的方式創建符合Maven約定的目錄結果的項目&#xff0c;并手動建立pom.xml文件&#xff0c;但是太繁瑣了。因此&#xff0c;這里直接建立maven項目。note: eclipse有內建的maven項目創建功能&#xff0c;倘若…

微軟超過蘋果 成為全球第一大市值公司

11月23日周五盤中至收盤&#xff0c;微軟市值正式超過蘋果&#xff0c;成為世界上市值最高的公司。收盤時&#xff0c;微軟市值為7533.4億美元&#xff0c;蘋果市值為7468.2億美元&#xff0c;亞馬遜市值為7366.2億美元&#xff0c;谷歌市值為7255.2億美元。 上次蘋果與微軟市值…

創新大賽成就創業夢想 超30%入榜應用獲投資意向

摘要&#xff1a;騰訊開放平臺宣布移動應用賽區正式開啟&#xff0c;新一輪的創業夢想正在成長中。據悉&#xff0c;在騰訊開放平臺應用創新大賽中誕生了多款DAU&#xff08;日活躍用戶數&#xff09;超百萬的應用。小魚吃吃吃、開心泡泡貓等引領社交游戲潮流&#xff0c;視頻達…

如何判斷軟件架構的好與壞

判斷一個軟件的架構的好與壞有很多方法&#xff0c;不過如果讓我一句話來描述的話&#xff1a; 如果一個軟件開發程度在70%以上的情況下&#xff0c;加入一個新功能&#xff0c;還需要涉及到大量的文件&#xff0c;代碼的修改&#xff0c;那么這個軟件架構一定很爛&#xff0c;…

網關(Gateway)詳解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 網關(Gateway)又稱網間連接器、協議轉換器。網關在網絡層以上實現網絡互連&#xff0c;是最復雜的網絡互連設備&#xff0c;僅用于兩個高…

【重點突破】—— React實現富文本編輯器

前言&#xff1a;富文本編輯器Rich Text Editor, 簡稱 RTE, 是一種可內嵌于瀏覽器&#xff0c;所見即所得的文本編輯器。 一、安裝插件 react-draft-wysiwyg&#xff1a; 文本編輯器插件 draftjs-to-html&#xff1a;文本轉換為html的插件 yarn add react-draft-wysiwyg draftj…

1106: 回文數(函數專題)

題目描述 一個正整數&#xff0c;如果從左向 右讀&#xff08;稱之為正序數&#xff09;和從右向左讀&#xff08;稱之為倒序數&#xff09;是一樣的&#xff0c;這樣的數就叫回文數。輸入兩個整數m和n&#xff08;m<n)&#xff0c;輸出區間[m&#xff0c;n]之間的回文數。 …

Ubuntu 12.10 正式發布

Canonical今天正式發布了Ubuntu 12.10版本&#xff0c;代號為“Quantal Quetzal”&#xff0c;意為量子綠咬鵑&#xff0c;綠咬鵑是一種生活在美洲的顏色極為鮮艷的鳥。Ubuntu的版本代號一直都這么奇怪。 在該版本中&#xff0c;改進了Unity桌面環境&#xff0c;弱化了本地應用…

Hibernate中1+N問題以及解決方法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. Hibernate中的1N問題描述 在多對一關系中&#xff0c;當我們需要查詢多的一方對應的表的記錄時&#xff0c;可以用一條sql語句就能…

Android應用開發—通用的GridView網格分割線

注&#xff1a;本文基于 Android RecyclerView 使用完全解析 體驗藝術般的控件 中關于GridView網格分割線部分代碼擴展而來。 原接口代碼&#xff1a; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import andro…

hdfs部署

一、下載Hadoop 2.6.0-cdh5.7.0的tar.gz包并解壓&#xff1a; wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0.tar.gz tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz cd /usr/local/hadoop-2.6.0-cdh5.7.0/ ls bin bin-mapreduce1 cloudera etc examples …

JVM技術周報第2期

JVM技術周報第2期 JVM技術周報分享JVM技術交流群的討論內容&#xff0c;由群內成員整理歸納而成。如果你有興趣入群討論&#xff0c;請關注「Java技術精選」公眾號&#xff0c;通過右下角菜單「入群交流」加我好友&#xff0c;獲取入群詳情。 1、如何閱讀源碼&#xff1f; 在我…

最長重復子串和最長不重復子串求解

最長重復子串和最長不重復子串求解 本文內容框架&#xff1a; 1 最長重復子串 基本方法、KMP算法求解、后綴數組求解 2 最長不重復子串 基本方法、動態規劃、動態規劃Hash 3 小結 1最長重復子串 1.1問題描述 首先這是一個單字符串問題。子字符串R 在字符串L 中至少出現兩…

sql 查詢結果為null替換 為 0

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 mysql : ifnull( xxx , 0 ) select ifnull(colname,0) from tablename oracle: NVL&#xff08;xxx , 0 )

前后端分離——token超時刷新策略

前言 記錄一下前后端分離下————token超時刷新策略&#xff01; 需求場景 昨天發了一篇記錄 前后端分離應用——用戶信息傳遞 中介紹了token認證機制&#xff0c;跟幾位群友討論了下&#xff0c;有些同學有這么一個疑惑&#xff1a;token失效了&#xff0c;應該怎么做&…

Android ImageView的scaleType(圖片比例類型)屬性與adjustViewBounds(調整視圖邊界)屬性

本文轉載自[Android ImageView的scaleType&#xff08;圖片比例類型&#xff09;屬性與adjustViewBounds&#xff08;調整視圖邊界&#xff09;屬性]并做了排版的修改(http://www.cnblogs.com/xzbc/p/5098347.html) Android ImageView的scaleType的屬性可設置為matrix&#xff…