蘇州培訓(xùn)網(wǎng) > 蘇州web前端培訓(xùn)機(jī)構(gòu) > 蘇州其然軟件開發(fā)培訓(xùn)
首頁 培訓(xùn)網(wǎng) 最新資訊 熱門問答

蘇州其然軟件開發(fā)培訓(xùn)

免費(fèi)試聽

您當(dāng)前的位置: 蘇州軟件系統(tǒng)培訓(xùn) > 蘇州web前端培訓(xùn) > 太倉Java語言培訓(xùn)學(xué)費(fèi)多少

太倉Java語言培訓(xùn)學(xué)費(fèi)多少_JAVA培訓(xùn)

¥詳詢

班制:周末班

蘇州其然軟件開發(fā)
上課(咨詢)地址:蘇州市昆山市震川西路111號(hào)名仕大廈
報(bào)名咨詢 預(yù)約試聽
課程介紹
太倉Java語言培訓(xùn)學(xué)費(fèi)多少
其然IT 教育師資

李明杰(MJ)高級(jí)講師

多年軟件開發(fā)經(jīng)驗(yàn)和教學(xué)經(jīng)驗(yàn),尤其精通Android和iOS平臺(tái)的開發(fā),還開發(fā)了2個(gè)iOS的流行開源框架(MJRefresh、MJExtension), 目前在國內(nèi)的使用率非常高。

李老師曾負(fù)責(zé)主導(dǎo)開發(fā)過裝飾ERP系統(tǒng)手機(jī)端、服裝連鎖管理系統(tǒng)手機(jī)及平板客戶端、自動(dòng)雞尾酒調(diào)酒機(jī)系統(tǒng)、網(wǎng)絡(luò)斗地主RPG、游戲 引擎等。曾以架構(gòu)師及技術(shù)總監(jiān)的角色幫客戶成功獲得多家風(fēng)投,并上了中央電視臺(tái)《給你一個(gè)億》節(jié)目。除了Android和iOS平臺(tái),李老師也深入研究 HTML5、phoneGap、Sencha-Touch、Less、Bootstrap、AngularJS、NodeJS等前端利器。

2015年8月 CCTV發(fā)現(xiàn)之旅《華商論見》欄目特約嘉賓,受邀參加節(jié)目《互聯(lián)網(wǎng) 浪潮下的創(chuàng)業(yè)之道》,接受央視著名主持人水均益采 訪。2015年10月 曾受邀加入中國經(jīng)貿(mào)代表團(tuán)隨總理出訪韓國,參與總理訪韓午餐會(huì)以及中日韓工商峰會(huì)。2015年12月 榮獲中國經(jīng)濟(jì)新模 式創(chuàng)新與發(fā)展峰會(huì)“2015中國IT教育培訓(xùn)行業(yè)**具創(chuàng)新人物”獎(jiǎng)。

李老師不但具有豐富的軟件開發(fā)經(jīng)驗(yàn),并且懂得如何把自己掌握的知識(shí)及技能傳授給他人,曾給多家企業(yè)提供Android/iOS技術(shù)培訓(xùn) 、技術(shù)支持、技術(shù)咨詢等服務(wù)。李老師的授課視頻深得學(xué)生們的喜愛,已培養(yǎng)出好幾千名iOS程序員。


太倉Java語言培訓(xùn)學(xué)費(fèi)多少

現(xiàn)在學(xué)習(xí)Java還有前途嗎?

太倉Java語言培訓(xùn)學(xué)費(fèi)多少

在互聯(lián)網(wǎng)行業(yè),Java工程師是一個(gè)技術(shù)含量非常高的崗位,支撐了互聯(lián)網(wǎng)行 業(yè)的半壁江山,全世界有一千萬Java程序員,目前還在有更多的計(jì)算機(jī)愛好者向Java的大門奔來。Java發(fā)展了20多年,關(guān)于Java的悲觀論調(diào)也不時(shí)出現(xiàn) ,現(xiàn)在學(xué)Java還有前途嗎?是否已經(jīng)過了紅利期了呢?

Java作為所有編程語言中熱門技術(shù),可以說它無處不在,目前全球有著數(shù)十 億的設(shè)備正在運(yùn)行著Java,很多服務(wù)器程序都是用Java編寫,用以處理每天超過數(shù)以千萬的數(shù)據(jù)。

無論是手機(jī)軟件、手機(jī)Java游戲還是電腦軟件,每一次購物到每一筆支付成 功,都離不開Java,越來越多的企業(yè)也正采用Java語言開發(fā)網(wǎng)站,而在所有程序員中,Java開發(fā)工程師就占據(jù)了20%的比例。

從國內(nèi)排名靠前網(wǎng)站的主要開發(fā)語言,也可以看出Java在各大開發(fā)語言中的 地位。淘寶、搜狐、網(wǎng)易等一線互聯(lián)網(wǎng)公司,都在使用Java開發(fā)語言。

這也不難理解,為什么Java現(xiàn)在這么火爆,吸引越來越多的人學(xué)習(xí),根本原 因,還是因?yàn)槠髽I(yè)對(duì)Java的認(rèn)可和應(yīng)用。

Java有沒有前途,需要我們認(rèn)清自己今后應(yīng)該怎么走自己的路線,是走技術(shù) ,還是走管理。走技術(shù)路線:從初級(jí)、中級(jí)、高級(jí)再到軟件架構(gòu)師。如果說走管理路線:項(xiàng)目經(jīng)理、部門經(jīng)理、技術(shù)總監(jiān)。只有清楚了自己要走的路線 后,再往決定的那一方面去努力,學(xué)習(xí)。除此以外,還有一些人學(xué)了這一專業(yè)后,從事銷售顧問、培訓(xùn)講師、自己創(chuàng)業(yè)的都有,關(guān)鍵是自己要認(rèn)識(shí)自己 ,自己更適何哪一條路。

所以,先認(rèn)清“正確的結(jié)果”,根據(jù)正確的結(jié)果去設(shè)計(jì)你的過程。當(dāng)一個(gè)人 具有明確的職業(yè)目標(biāo)時(shí),就會(huì)對(duì)有助于實(shí)現(xiàn)目標(biāo)的蛛絲馬跡都特別敏感,做事情相應(yīng)也就會(huì)很有目的性,而不是稀里糊涂的。所以,就容易到達(dá)自己的 目的。如果沒有職業(yè)目標(biāo),腳踩西瓜皮滑到哪里是哪里,學(xué)什么技術(shù)都沒前途。

在未來的幾年,Java工程師人才的需求還在不斷的加大,由于人才的緊缺, 這個(gè)崗位相對(duì)于其它專業(yè)薪資待遇還是不錯(cuò)的,而且Java工程師的待遇是與工作經(jīng)驗(yàn)直接掛勾的,當(dāng)你有了豐富的經(jīng)驗(yàn)以后,你在這個(gè)行業(yè)里就比較搶 手了,而且企業(yè)所出的薪酬也是相當(dāng)高的,到時(shí)只有你選擇他們了。

Java課程介紹


太倉Java語言培訓(xùn)學(xué)費(fèi)多少


Java企 業(yè)級(jí)應(yīng)用

“就業(yè)班”

一階段 Java語言核心

第二階段 數(shù)據(jù)庫及Web前端技術(shù)

第三階段 Java Web開發(fā)及服務(wù)端 框架

第四階段 綜合項(xiàng)目實(shí)踐


Java課程介紹 

太倉Java語言培訓(xùn)學(xué)費(fèi)多少

Java企業(yè)級(jí)應(yīng)用

“就業(yè)班”

一階段 Java語言核心

二階段 數(shù)據(jù)庫及Web前端技術(shù)

三階段 Java Web開發(fā)及服務(wù)端框架

四階段 綜合項(xiàng)目實(shí)踐

Java互聯(lián)網(wǎng)開發(fā)

“培優(yōu)班”

一階段 Java語言核心

二階段 Java Web服務(wù)端技術(shù)

三階段 Java Web框架及互聯(lián)網(wǎng)架構(gòu)

四階段 Java互聯(lián)網(wǎng)架構(gòu)

職場(chǎng)華麗轉(zhuǎn)身

“才高班”

大數(shù)據(jù) 互聯(lián)網(wǎng)大牛班

6大實(shí)訓(xùn)項(xiàng)目

“愛逛網(wǎng)”電商后端數(shù)據(jù)平臺(tái)

培訓(xùn)經(jīng)驗(yàn)=就業(yè)經(jīng)驗(yàn)

>Java互聯(lián)網(wǎng)開發(fā)


“培優(yōu)班”

一階段 Java語言核心

第二階段 Java Web服務(wù)端技術(shù)

第三階段 Java Web框架及互聯(lián)網(wǎng)架構(gòu)

第四階段 Java互聯(lián)網(wǎng)架構(gòu)


職場(chǎng)華麗轉(zhuǎn)身

“才高班”

大數(shù)據(jù) 互聯(lián)網(wǎng)大牛班

6大實(shí)訓(xùn)項(xiàng)目

“愛逛網(wǎng)”電商后端數(shù)據(jù)平臺(tái)

培訓(xùn)經(jīng)驗(yàn)=就業(yè)經(jīng)驗(yàn)


duilib各種布局的作用,相對(duì)布局與絕對(duì)布局的的意義與用法


>

我使用duilib快3個(gè)月了,總體感覺duilib的使用還是較為簡單的,只是剛?cè)腴T時(shí)可能有些摸不清頭腦。今天寫一篇關(guān)于duilib的入門日志,大致說一下duilib中的各個(gè)布局的作用,以及很關(guān)鍵的相對(duì)布局與絕對(duì)布局的意義與用法。希望可以幫到使用duilib的新手朋友們。duilib高手就可以直接省略這篇文章了!


      我剛使用duilib的時(shí)候非常依賴duilib自帶的設(shè)計(jì)器,用他可以拖拉控件,可視化的做出自己想要的界面??墒怯靡欢螘r(shí)間就會(huì)發(fā)現(xiàn)原帶的設(shè)計(jì)器有很多bug,時(shí)不時(shí)會(huì)崩潰,支持的控件數(shù)量有限,屬性數(shù)量也有限,導(dǎo)出的代碼冗余。當(dāng)時(shí)問了幾個(gè)高手,大家建議不要使用設(shè)計(jì)器而應(yīng)該自己手寫xml代碼。起初手寫時(shí)感覺特別麻煩,可是用幾天后你會(huì)發(fā)現(xiàn)手寫要比使用設(shè)計(jì)器好得多:你可以更加了解duilib,熟悉每個(gè)控件的各個(gè)屬性,對(duì)控件的控制也更加方便。而如果想稱心如意的脫離設(shè)計(jì)器去編寫xml文件,有非常有必要弄明白各個(gè)布局的用法和布局技巧。我現(xiàn)在可以完全靠手寫xml來做出一個(gè)程序的界面,相信用了一段duilib的朋友也是這樣。


     在這里提醒一下新手朋友,在duilib的根目錄有一個(gè)屬性列表.xml的文件,他包含了絕大多數(shù)控件的絕大多數(shù)屬性的介紹,有不懂的屬性記得時(shí)常翻看他,同時(shí)不得不說這個(gè)文件包含的屬性的確是不全面的,想要知道**全面的屬性信息,可以看每個(gè)控件的源代碼,在SetAttribute函數(shù)中可以看到**全面的屬性信息!


      要想手寫xml,當(dāng)然必須有一個(gè)編寫工具,原則上只要是可以編寫文本的工具都可以,大家根據(jù)習(xí)慣自己挑選適合的工具,我目前在使用的是sublime這款工具,感覺編寫xml非常方便,使用界面也不錯(cuò)。


6大布局的作用:

      duilib的Layout目錄專門放置布局相關(guān)的容器控件,這6個(gè)布局分別為:Container、VerticalLayout、HorizaontalLayout、TileLayout、TabLayout、ChildLayout。容器之間可以任意相互嵌套,我分別說明他們的用法。


      首先我要說明一下,下面介紹的時(shí)候,我都默認(rèn)認(rèn)為每個(gè)控件的float屬性為false,也就是不使用絕對(duì)定位,這個(gè)屬性會(huì)打破各個(gè)布局的作用。


    Container:


     Container布局是其他所有布局以及含有容器特性(如CList、CListContainerElement)的控件的基類,而實(shí)際上開發(fā)過程中很少使用這個(gè)布局,只用他來做其他更高級(jí)的布局的基類。因?yàn)镃ontainer布局中的所有控件都會(huì)自動(dòng)填充滿整個(gè)布局,所有的控件都疊到了一起,假如恰好有什么需求要讓子控件都覆蓋起來,而且可以隨著容器的改變而自適應(yīng)填充的話,Container就是不二之選。而除了這個(gè)效果之外,一般我們不使用它。


     VerticalLayout、HorizaontalLayout:

     VerticalLayout與HorizaontalLayout布局無疑是duilib中**常使用的兩個(gè)布局,巧妙的使用這兩個(gè)布局可以滿足大多數(shù)的布局需求。從單詞的意思上不難看出VerticalLayout是縱向布局,HorizaontalLayout是橫向布局。這門兩個(gè)直接繼承自Container布局。


     VerticalLayout布局會(huì)讓他包含的元素都縱向排列開,HorizaontalLayout布局會(huì)讓給他包含的元素都橫向排列開:如圖


                                                           


        我故意沒讓控件填滿整個(gè)容器,為了說明這兩個(gè)布局不會(huì)強(qiáng)行讓子元素的總和去填滿容器,縱向布局會(huì)從上到下根據(jù)每個(gè)控件的高度讓他們排到一起,橫向布局會(huì)從左到右根據(jù)每個(gè)控件的寬度讓他們排到一起。另外可以看到,縱向布局只關(guān)心子元素的高度,而不會(huì)強(qiáng)行讓子元素的寬度等于容器的寬度,這點(diǎn)從圖片可以看到,橫向布局同理也是只關(guān)心子元素的寬度。而這兩個(gè)布局經(jīng)常會(huì)嵌套使用,如下效果:




       可以看到我**外層使用了一個(gè)縱向布局,他包含了橫縱橫三個(gè)布局(分別為紅綠藍(lán)顏色),每個(gè)橫向布局里又分別包含了幾個(gè)按鈕。我們?cè)诰帉懡缑鏁r(shí)經(jīng)常用到這個(gè)方法!以下是這個(gè)布局效果圖對(duì)應(yīng)的xml代碼:



[html] view plain copy   <?xml version="1.0" encoding="utf-8" standalone="yes" ?>   <Window size="300,226">       <VerticalLayout width="300" height="318" bkcolor="#FFFFFFFF">           <HorizontalLayout width="300" height="65" bkcolor="#FFFF0000">               <Button text="按鈕測(cè)試" width="60" height="35" />               <Button text="按鈕測(cè)試" width="60" height="63" />               <Button text="按鈕測(cè)試" width="60" height="35" />           </HorizontalLayout>           <VerticalLayout width="300" height="96" bkcolor="#FF00FF00">               <Button text="按鈕測(cè)試" width="60" height="64" />               <Button text="按鈕測(cè)試" width="60" height="75" />               <Button text="按鈕測(cè)試" width="60" height="64" />           </VerticalLayout>           <HorizontalLayout width="300" height="65" bkcolor="#FF0000FF">               <Button text="按鈕測(cè)試" width="60" height="47" />               <Button text="按鈕測(cè)試" width="60" height="64" />               <Button text="按鈕測(cè)試" width="60" height="64" />           </HorizontalLayout>       </VerticalLayout>   </Window>  

       TileLayout:

       TileLayout布局是用來做類似360工具箱的效果:




       在前面的文章里,我寫的《duilib中ListCtrl控件的實(shí)現(xiàn)》和《仿酷狗音樂播放器開發(fā)日志十三——左側(cè)功能塊的完善》正是使用了這個(gè)布局完成的。這個(gè)布局有有兩個(gè)關(guān)鍵屬性:



[html] view plain copy   <Attribute name="columns" default="1" type="INT" comment="列數(shù),如(4)"/>   <Attribute name="itemsize" default="0,0" type="SIZE" comment="子項(xiàng)固定大小,如(128,128)"/>  

 

       columns和itemsize屬性,這兩個(gè)屬性不能一起用,應(yīng)該只是用其中的一個(gè)。使用columns屬性可以來設(shè)置每行中包含的列數(shù),他會(huì)自動(dòng)把包含的元素從左到右從上到下按照columns屬性的設(shè)置排列起來,他把每行的列數(shù)固定死了。而itemsize有兩個(gè)字段,**我讀源碼,發(fā)現(xiàn)第二個(gè)字段是無效的,我們只要使用**個(gè)字段就行了,他會(huì)設(shè)置每個(gè)元素所占的區(qū)域,比如容器的寬度是500,給itemsize設(shè)置為 100 x 10,那個(gè)每行就會(huì)容納5個(gè)元素,當(dāng)我們拉伸了窗體讓容器寬度變?yōu)?00,那么每行就會(huì)自動(dòng)容納7個(gè)元素,這意味著使用這個(gè)屬性會(huì)讓每行容納的元素個(gè)數(shù)是自動(dòng)可變的!這在很多情況下是很有用的屬性。注意itemsize并不是直接設(shè)置了子控件的大小,而只是限制了子控件的**大區(qū)域。比如itemsize為100x100,而子控件設(shè)置為50x50,那么 **終的子控件大小為50x50,而子控件的位置會(huì)按照100x100來計(jì)算。這個(gè)希望讀者自己實(shí)踐一下來理解這個(gè)效果!



     TabLayout:

     TabLayout布局同樣常用,他就像MFC的選項(xiàng)卡CTabCtrl控件,如圖:




      但是在duilib中TabLayout只是下面的布局界面,而不包含頂端的選項(xiàng)卡按鈕,所以經(jīng)常用Option控件配合他一起使用,使用他時(shí)他會(huì)把他包含的下一級(jí)元素作為一個(gè)頁面,所以我們通常在他里面放入橫縱向布局來作為一個(gè)頁面,在橫縱向布局里再規(guī)劃每個(gè)頁面的外觀。


      這個(gè)控件的詳細(xì)使用方法大家可以看duilib自帶的360demo,我就不贅述了!


      ChildLayout:

      ChildLayout布局比較少用,因?yàn)樗墓δ芸梢杂闷渌季謥泶?,他的作用就是從一個(gè)xml文件中加載布局來嵌入到ChildLayout布局所在的地方,使用這個(gè)布局一般只需要指定xmlfile屬性來設(shè)置xml文件位置就可以了。他的意義在于可以把繁雜的大量xml代碼分隔開。比如他和TabLayout布局結(jié)合,讓TabLayout布局包含5個(gè)ChildLayout布局,而每個(gè)ChildLayout布局分別從5個(gè)xml文件加載自己的布局文件,這樣就可以分塊化的編寫布局代碼。


      實(shí)際上有個(gè)比他更好用的標(biāo)簽,就是Include標(biāo)簽,Include不屬于布局,但他的作用在布局方面非常類似ChildLayout,指定他的Source屬性到某個(gè)xml文件就可以了。相對(duì)ChildLayout,Include的優(yōu)點(diǎn)是可以自動(dòng)識(shí)別自定義控件,而ChildLayout不可以!


      在這里要提一下360Demo的自定義控件,這個(gè)demo的自定義控件做法誤導(dǎo)了很多人,里面使用了自定義控件的方法,把一個(gè)xml布局文件嵌入到界面里,這種做法完全沒必要,直接使用Include標(biāo)簽,一句xml代碼可以完全代替自定義控件。


      這里給出一個(gè)Include的用法:


[html] view plain copy   <Include source="Login\ScrollBar.xml" count="1" />  


      其中source屬性指定xml文件的路徑,count指定解析的次數(shù)。


絕對(duì)布局的意義與用法:

       在知道了6大布局的用法之后,知道了各種樣式的界面外觀的大致布局方法,而這還遠(yuǎn)不夠讓我們寫出漂亮的布局外觀,只有配合相對(duì)布局與絕對(duì)布局才可以更好的控制界面的元素。值得一提的是,我這里說的相對(duì)布局和絕對(duì)布局并不是一個(gè)容器或者控件,這只是一種技巧和使用方法,用在容器布局所包含的控件上,常用到橫縱向布局中。


      我先來介紹絕對(duì)布局,籠統(tǒng)上說絕對(duì)布局和相對(duì)布局其實(shí)只有一個(gè)差別,也就是我在前面提到的float屬性,容器中包含的控件float屬性為真就是絕對(duì)布局,為假就是相對(duì)布局。不要小看這一個(gè)屬性,他帶來的效果可以天壤之別!


      給控件的float屬性設(shè)為真后,就使用了絕對(duì)布局,故名意思,絕對(duì)布局就是讓控件的坐標(biāo)絕對(duì)化,這樣這個(gè)控件就不受他的容器的束縛而可以自己隨意設(shè)置自己的位置!比如在橫縱向布局中給他們包含的子控件設(shè)置float屬性,這個(gè)控件就不會(huì)被自動(dòng)橫縱向排列。而我的建議是,能不用絕對(duì)布局就別用絕對(duì)布局!原因有三個(gè):


      1)絕對(duì)布局破壞了各個(gè)容器的特性,而不受容器的束縛。

      2)絕對(duì)布局讓控件的坐標(biāo)固定,不利于控件自動(dòng)調(diào)節(jié)位置。

      3)后面提到的相對(duì)布局幾乎可以完成絕對(duì)布局的所有特性。


     那么為什么要用絕對(duì)布局,因?yàn)樗囊粋€(gè)功能是相對(duì)布局無法完成的,就是讓控件或者布局重疊或者相交!有的時(shí)候我們必須這樣做來讓控件組合起來達(dá)到一些效果。我可以明確的說,我在做仿酷狗播放器的過程中,整個(gè)xml布局代碼只用了2個(gè)絕對(duì)布局,一個(gè)是編寫搜索欄《仿酷狗音樂播放器開發(fā)日志二——搜索欄的編寫》,一個(gè)是編寫電臺(tái)控件。如圖:



 

       另外一個(gè)非常經(jīng)典的使用絕對(duì)布局的例子就是我前幾天寫的《用duilib制作仿QQ2013動(dòng)態(tài)背景登錄器》,這些例子都是因?yàn)橐尶丶丿B起來組合出新的控件才使用了絕對(duì)布局,如果不讓控件重疊或者沒有特殊需求,**好別用絕對(duì)布局。


        雖然不建議使用,但我也得說一下絕對(duì)布局相關(guān)的屬性和使用技巧。

        1)把float屬性設(shè)置為真。

        2)設(shè)置pos屬性,這個(gè)屬性在float為真時(shí)才有效,他包含四個(gè)字段,分別以為了控件的左上右下下個(gè)坐標(biāo)的位置,但是建議只指定前兩個(gè)字段來設(shè)置控件的左上角的坐標(biāo),控件的寬度用width和height屬性來控制,這樣做的好處是避免了計(jì)算右下角坐標(biāo)的繁瑣!以后修改的時(shí)候也很清晰!


        舉出一個(gè)例子:


[html] view plain copy   <Label name="MusicName" float="true" pos="100,100" width="26" height="22" textcolor="#FF505050" endellipsis="true" />           這里設(shè)置了一個(gè)Label控件,左上角放到100,100的坐標(biāo)上,控件高22,寬26


        不得不提一個(gè)很有用的屬性,那就是relativepos屬性,屬性列表沒有列出這個(gè)屬性,這是我自己總結(jié)的



[html] view plain copy   <Attribute name="relativepos" default="0,0,0,0" type="RECT" comment="設(shè)置相對(duì)移動(dòng),float為真時(shí),分別表示橫縱向位移值,橫縱向縮放值,移動(dòng)單位建議50或100"/>  

        用了這個(gè)屬性,就可以讓控件擁有相對(duì)布局的一部分特性,那就是根據(jù)容器的大小,自己可以調(diào)整位置和大小!這個(gè)特點(diǎn)我在《仿酷狗音樂播放器開發(fā)日志二——搜索欄的編寫》用到了,是為了讓搜索按鈕可以自己移動(dòng)。這個(gè)屬性的前兩個(gè)字段表示橫縱向的位移值,后兩個(gè)字段表示縮放值,具體效果大家應(yīng)該自己實(shí)踐一下!另外這個(gè)屬性默認(rèn)是有嚴(yán)重bug的,就是窗體**小化再恢復(fù)后有這個(gè)屬性的控件會(huì)自動(dòng)無規(guī)律偏移,這個(gè)bug我修復(fù)了,詳見《仿酷狗音樂播放器開發(fā)日志二——搜索欄的編寫》。



        這樣就介紹完了絕對(duì)布局,然后就是整片文章的**重要部分,相對(duì)布局!


相對(duì)布局的意義與用法:

       我把相對(duì)布局的介紹放到**后,因?yàn)樗苤匾?


       在容器內(nèi)部使用控件或者容器時(shí),float屬性設(shè)置為flase(duilib默認(rèn)為false)就是相對(duì)布局了。這是我非常推薦使用的,前面我也說了我在寫仿酷狗的整個(gè)布局中,上百個(gè)控件中我只給兩個(gè)控件使用了絕對(duì)布局,其余都是相對(duì)布局。他的優(yōu)點(diǎn)如下:


        1)布局和控件是可以根據(jù)窗體的大小改變而自動(dòng)調(diào)整位置的,這點(diǎn)很重要

        2)不需要絕對(duì)布局那樣麻煩的計(jì)算各個(gè)控件的位置

        3)在容器中調(diào)整前一個(gè)控件的位置,后面的控件都會(huì)自動(dòng)調(diào)整坐標(biāo)


      其實(shí)總得來說使用相對(duì)布局意義就是使用布局控件的自動(dòng)排列特性!


      使用了相對(duì)布局后,就不用設(shè)置float屬性和pos屬性,一般只設(shè)置甚至不設(shè)置width和height屬性。這點(diǎn)很重要,如果你的控件或者布局的大小是固定的,那么就設(shè)置width和height屬性,如果想讓控件或者布局根據(jù)窗體的大小而自動(dòng)調(diào)整大小和位置,就不設(shè)置這兩個(gè)屬性。如果只設(shè)置了一個(gè)屬性,比如width設(shè)置為100,而height不設(shè)置,那么他的高度是自動(dòng)調(diào)整的而寬度是固定的。父容器會(huì)自動(dòng)安排他包含的元素,讓含有width和height屬性的控件占據(jù)相應(yīng)的大小,把剩下的空間都分配給沒有設(shè)置wieth和height屬性的容器或者控件里??聪旅嬉粋€(gè)例子:



[html] view plain copy   <?xml version="1.0" encoding="utf-8" standalone="yes" ?>   <Window size="300,300">       <VerticalLayout name="Father">           <HorizontalLayout name="Sub1" height="50" >           </HorizontalLayout>                 <VerticalLayout name="Sub2">           </VerticalLayout>                 <HorizontalLayout name="Sub3" height="50" >           </HorizontalLayout>       </VerticalLayout>   </Window>  

   

      可以看到窗體的大小為300x300,而**外層的是一個(gè)名為Fahter的縱向容器,包含三個(gè)子容器。而Father沒有指定width和height,所以當(dāng)我改變了窗體的大小時(shí),F(xiàn)ather會(huì)自動(dòng)調(diào)整自己的大小到和窗體大小相同,而三個(gè)子容器我都眉頭指定width屬性,所以三個(gè)子容器的寬度和Father是一樣,也就是他們的寬度都是和窗體寬度一樣,并且會(huì)自動(dòng)調(diào)整。Sub1和Sub3的高度設(shè)置為50,所以他們的高度就固定了,而Sbu2的高度也沒有指定,那他會(huì)自動(dòng)占據(jù)了除了Sub1和Sub2的所有空間!其實(shí)這個(gè)例子的布局是非常常見的界面布局例子,比如說酷狗,sub1和sub3分別表示標(biāo)題欄和狀態(tài)欄,sub2為程序的主界面:





       關(guān)于酷狗的更加詳細(xì)的布局分析可以看我前面寫的博客《仿酷狗音樂播放器開發(fā)日志——整體框架分析》,幾乎每開發(fā)酷狗的一部分,我都會(huì)把布局分析一下寫出來。


      把這些知識(shí)綜合起來,現(xiàn)在就可以寫出一個(gè)自動(dòng)調(diào)整大小的大致布局了,但是還沒法精確控制每個(gè)控件的位置。


      利用上面介紹的自動(dòng)占位的特性,我這里舉一個(gè)標(biāo)題欄編寫的例子:



[html] view plain copy   <HorizontalLayout name="background" height="30" bkimage="file= UI\BKImage\4.jpg  source= 0,0,1000,30 " ><!-- 標(biāo)題欄 -->           <Label text="皮膚與窗口調(diào)整——Redrain播放器" textcolor="#FFFFFFFF" textpadding="5,0,0,0" font="1" autocalcwidth="false" width="300"/>       <Control />       <Button name="closebtn" width="23" height="18" padding="0,6,0,0" normalimage="UI\title\close_normal.png" hotimage="UI\title\close_hover.png" pushedimage="UI\title\close_down.png" />                        </HorizontalLayout>  




       這個(gè)例子是我的仿酷狗播放器的換膚窗體的標(biāo)題欄。他的外層是一個(gè)橫向布局,高度為30,寬度隨窗體調(diào)整。讓標(biāo)題文字居于左側(cè),關(guān)閉按鈕在**右側(cè),如果讓窗體調(diào)整寬度后文字和關(guān)閉按鈕自動(dòng)調(diào)整位置,就需要把中間的空位占滿。這時(shí)我們就需要一個(gè)占位控件,不給他設(shè)置width和height屬性,這樣子他就會(huì)自動(dòng)占據(jù)剩余的空間!就達(dá)到了相對(duì)布局的自動(dòng)調(diào)整位置的效果。這個(gè)使用方法是相對(duì)布局里非常常用的!而這個(gè)占位控件在沒有什么其他要求時(shí)建議像我給出的例子那樣,使用Control控件,因?yàn)樗撬锌丶腿萜鞯淖嫦然?,代碼和屬性相對(duì)是**少的,這樣有利于提高程序的效率!


       在充分理解了占位的技巧后,再配合一些微調(diào)屬性,就可以完美控制各個(gè)控件了,這幾個(gè)微調(diào)屬性分別是inset、padding、childpadding,這幾個(gè)屬性的介紹如下:



[html] view plain copy   <Attribute name="padding" default="0,0,0,0" type="RECT" comment="外邊距,如(2,2,2,2)"/>   <Attribute name="inset" default="0,0,0,0" type="RECT" comment="容器的內(nèi)邊距,如(2,2,2,2)"/>   <Attribute name="childpadding" default="0" type="DWord" comment="子控件之間的額外距離,如(4)"/>         在float為假,也就是相對(duì)布局中,這幾個(gè)屬性才起效。



      inset屬性

      這是給容器控件使用的,使用后他所包含的所有使用相對(duì)布局的元素,都會(huì)被限制在設(shè)置的范圍內(nèi),適合對(duì)容器內(nèi)所用元素進(jìn)行整體的坐標(biāo)控制。比如在前面提到的做360工具箱時(shí),我們使用TileLayout容器來存放每一個(gè)工具,我們首先設(shè)置inset屬性,就可以讓所有的工具項(xiàng)限制在一定范圍內(nèi),例子如下:



[html] view plain copy   <TileLayout name="listctrl" width="540" height="400" inset="20,20,0,20" childpadding="20" vscrollbar="true" columns="2" bkimage="CustomList\List_bk.png" itemhotimage="CustomList\ListItem_bk_hover.png" itemselectedimage="CustomList\ListItem_bk_hover.png">   </TileLayout>  




       **設(shè)置inset屬性,讓所有元素限制在一定范圍內(nèi)而不用重復(fù)設(shè)置每個(gè)元素的屬性。


      childpadding屬性:

      childpadding屬性設(shè)置容器內(nèi)每個(gè)元素之間的間距,這個(gè)比較容易理解,上面的例子中也用到了childpadding屬性。這個(gè)屬性在不同容器中代表不同意思,在橫向布局中代表子控件之間的橫向間隔,在縱向布局中代表子控件之間的縱向間隔,在TileLayout容器中代碼行與行之間的間隔!


      padding屬性:

      padding屬性是相對(duì)布局中**常用的屬性!用來設(shè)置相對(duì)于前一個(gè)控件的位置,這個(gè)屬性的控件位置微調(diào)的關(guān)鍵。一般只用他的前兩個(gè)字段,設(shè)置左邊距和上邊距,后兩個(gè)字段是無效的,或者說存在問題(為什么會(huì)有問題?請(qǐng)看源碼)。不過使用這兩個(gè)字段就夠了。這是我的仿酷狗播放器的狀態(tài)的布局代碼:



[html] view plain copy   <HorizontalLayout height="30" inset="77,0,0,0" bkimage="UI\statusbar\status_bk.png"><!-- 狀態(tài)欄 -->       <Button width="31" height="30" padding="0,0,0,0" normalimage="UI\statusbar\add_normal.png" hotimage="UI\statusbar\add_hover.png" pushedimage="UI\statusbar\add_down.png" />       <Button width="31" height="30" padding="40,0,0,0" normalimage="UI\statusbar\locate_normal.png" hotimage="UI\statusbar\locate_hover.png" pushedimage="UI\statusbar\locate_down.png" />       <Button width="31" height="30" padding="40,0,0,0" normalimage="UI\statusbar\search_normal.png" hotimage="UI\statusbar\search_hover.png" pushedimage="UI\statusbar\search_down.png" />       <Button width="31" height="30" padding="40,0,0,0" normalimage="UI\statusbar\setting_normal.png" hotimage="UI\statusbar\setting_hover.png" pushedimage="UI\statusbar\setting_down.png" />       <Control />       <Label text="Redrain仿酷狗音樂盒DirectUI ^_^" textpadding="0,6,0,0" width="30" font="0" />   </HorizontalLayout>  






      使用padding屬性,這是底部這四個(gè)按鈕的相對(duì)位置。如果我想整體讓這四個(gè)控件向右位移10像素,那么我只要設(shè)置**個(gè)按鈕的padding屬性為padding="10,0,0,0",就可以了,其他布局完全不需要修改!


結(jié)束語

體驗(yàn)課預(yù)約試聽

倒計(jì)時(shí)

12:00:00

課程熱線:

在線咨詢

客服在線時(shí)間:早上9點(diǎn)~下午6點(diǎn),其他時(shí)間請(qǐng)?jiān)诰€預(yù)約報(bào)名或留言,謝謝!

蘇州web前端

免費(fèi)體驗(yàn)課開班倒計(jì)時(shí)

11: 41: 09

稍后會(huì)有專業(yè)老師給您回電,請(qǐng)保持電話暢通

咨詢電話:

校區(qū)導(dǎo)航

1個(gè)校區(qū)

蘇州其然軟件開發(fā)
推薦機(jī)構(gòu) 全國分站 更多課程

本周僅剩 個(gè)試聽名額

請(qǐng)鍵入信息,稍后系統(tǒng)將會(huì)把領(lǐng)獎(jiǎng)短信發(fā)至您的手機(jī)

申請(qǐng)?jiān)嚶犆~

QQ:
加盟合作:0755-83654572