編輯:關於Android編程
今天在公司第一次去當了回面試官,挺帶勁的啦,發現那位面試的小伙做的卷子裡有道關於layout_weight的問題,感覺答得不是很好,遂想寫個博客(其實是想要記錄下這有意思的事,好久沒寫博客了,看完記得點贊哦),總結了以下幾個小點,幫助大家理解哈。
一、如果把每個layout_width設為0dp,layout_weight設為1,會出現什麼問題呢?
首先我先在XML中寫個布局文件,代碼如下:
運行效果如下:
那麼問題來了:雖然layout_weight是有效果了,但是為什麼三個TextView沒有對齊呢?
問題解析:其實三個控件間是對齊了的,只是以當中的內容對齊。這當中的問題是在父容器中存在一個android:baselineAligned = “true”,所以我們應當把它設為false。
修改代碼如下:
最終效果如下:
二、如果把第一個layout_width設為wrap_content,又設置了每個控件的layout_weight的權值,那麼布局會如何分配寬度呢?
代碼如下:
運行的效果如下:
layout_weight分配的算法是:LinearLayout中的layout_weight屬性,首先按照控件聲明的尺寸進行分配,然後再將剩下的尺寸按weight分配。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPsj9oaLI57n7sNHDv7j2bGF5b3V0X3dpZHRoyejOqm1hdGNoX3BhcmVudNauuvOjrNKyxeTWw8HLbGF5b3V0X3dlaWdodKOsxMfDtNPWysfI57rOt9bF5L/ttsi1xKO/PGJyIC8+DQq0+sLryOfPwqO6PGJyIC8+DQo8aW1nIGFsdD0="代碼片段7" src="/uploadfile/Collfiles/20160414/20160414090835117.png" title="\" />
運行效果如下:
那麼問題又來了:發現第一個TextView反而比其他兩個權值更大的控件寬度更大呢?
分析:根據上面總結的分配規則,首先減去控件聲明的尺寸,父控件剩余的尺寸按比例分配。假設屏幕的寬度是720,那麼很明顯三個控件的寬度都是match_parent是不夠分的,此時分配完控件聲明的尺寸後,父控件剩余的寬度就為負數了,父控件剩余寬度rest = 720 - 720 * 3 = -720 * 2,接著就把剩余的寬度按layout_weight聲明的比例分配。下面就來具體計算各個控件的寬度:
(1)那麼就來計算第一個控件實際所分配的控件寬度:layout_width + 父控件剩余的寬度比例 –> 720 + (-720*2)/5 = 720 * (3/5)
(2)TextView2和TextView3的權值都是2,實際所分配的寬度大小就是:720 + (-720 * 2)/(2/5)= 720 * (1/5)
由此可見:上面所說的layout_weight寬度分配規則是正確的,控件寬度 + 父控件剩余寬度 * weight比例。
下面我再說下可以和layout_weight結合的一個屬性layoutSum,實現一個很有意思功能。
場景:假設只有一個控件,但是又想按比例分配寬度,怎麼解決?
問題分析:此時就缺少其他控件進行比例的劃分;
解決方案:雖然只有一個控件,但可以在父布局中定義總的權值,這樣子控件就可以有權值的比例了。
實現代碼如下:
四、不知道大家有沒發現XML中有些屬性是以layout開頭,像layout_gravity什麼的,而有些屬性則沒有layout開頭,這有什麼不同呢?
問題分析:layout的意思是布局,layout開頭的屬性實際上是說這些屬性由其父容器去獲取,再去設置。而沒有以layout開頭的屬性,就是由控件自己獲取設置。
總結一句話就是:Layout_開頭都是交給父容器,沒有Layout_開頭都是本身的屬性。
效果預覽Send:Click LocationMessage: 實現1:注冊高德地圖開發者賬號,創建應用、獲取高德地圖的 appkey2: jar 包建議直接從 融雲
簡介最近在閒逛的時候,發現了一款粒子爆炸特效的控件,覺得比較有意思,效果也不錯。但是代碼不好擴展,也就是說如果要提供不同的爆炸效果,需要修改的地方比較多。於是我對源代碼進
傲不可長,欲不可縱,樂不可極,志不可滿。—— 魏 徵 本講內容:SD卡 上一講中我們學習了Android的數據存儲采用File,但是這樣的數據是存儲在應用程序內
下面是開始Android編程的好方法:找一些與你想做事情類似的代碼調整它,嘗試讓它做你像做的事情經歷問題使用StackOverflow解決問題對每個你像添加的特征重復上述