死腦筋會讓你走很多彎路,但是你一定要改掉這個習慣
看原始碼,吐槽一下自己,我為什麼不看原始碼呢?傻嗎?找到linearlayout的onmeasure()方法
@override
protected
void
onmeasure(int widthmeasurespec, int heightmeasurespec) else
}
可以看到,分為兩種情況,如果方向是vertical,那自然不用說,肯定是子view的高度之和。
如果方向是horizontal?
如果linearlayout作為根部局,並且高度設為wrap_content,那麼他的高度到底由誰決定?
android:text="高度"
android:textsize="10sp"/>
android:id="@+id/tv2"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="高度"
android:textsize="20sp"/>
android:id="@+id/tv3"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="高度"
android:textsize="40sp"/>
android:id="@+id/linearlayout"
android:background="@color/coloraccent"
android:layout_width="0dp"
android:layout_height="match_parent"
android:minheight="100dp"
android:layout_weight="1">
linearlayout>
linearlayout>
上面這個布局檔案有四個子view,其中三個子view的高度為match_parent,並且其中乙個子view設定了minheight屬性,那麼linearlayout的高度到底由誰決定?你猜?你猜?你猜猜猜?猜有毛用,試一下就知道,答案是由設定wrap_content屬性的那個布局決定!
那麼如果所有的子view高度都是match_parent。
<?xml version="1.0" encoding="utf-8"?>
android:id="@+id/root"
xmlns:android=""
xmlns:tools=""
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="高度"
android:textsize="10sp"/>
android:id="@+id/tv2"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="高度"
android:textsize="20sp"/>
android:id="@+id/tv3"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="高度"
android:textsize="40sp"/>
android:id="@+id/linearlayout"
android:background="@color/coloraccent"
android:layout_width="0dp"
android:layout_height="match_parent"
android:minheight="100dp"
android:layout_weight="1">
linearlayout>
linearlayout>
高度由誰決定?答案是由高度最大的那個子view決定!這些在原始碼中都有體現!
有時候,原始碼真的很重要,被自己的常識限制了,以為如果都是match_parent,就真的match_parent了,仔細想一想真的很有趣,linearlayout就想乙個父親,高度為包裹內容,他有四個孩子,其中三個孩子高度都是match_parent,就是說,父親,我和你一樣高就夠了,其中乙個孩子說,我不,我的高度是包裹自己的內容,父親就說,好的,我們都不知道自己的高度,只有你知道自己的高度,那麼我們就都和你一樣高吧!
本篇屬於質量極低的文章,大神請繞路
LinearLayout控制項
linearlayout是線性布局控制項,它包含的子控制項將以橫向或豎向的方式排列,按照相對位置來排列所有的widgets或者其他的containers,超過邊界時,某些控制項將缺失或消失。因此乙個垂直列表的每一行只會有乙個widget或者是container,而不管他們有多寬,而乙個水平列表將會只...
LinearLayout的巢狀使用
在乙個頁面中,有時候我們需要很複雜的頁面布局。單純的水平垂直已經不能滿足我們的需求。這時候就可以使用linearlayout進行巢狀布局。如上,外面的linearlayout是水平布局,而裡面巢狀裡兩個垂直布局的linearlayout,結果兩個textview就變成了垂直布局。但是小linearl...
LinearLayout增加divider分割線
在android3.0及後面的版本在linearlayout裡增加了個分割線 android divider drawable shape android showdividers middle beginning end 分割線如果是那就直接使用就行,如果要使用顏色就必須使用shape來顯示,直接...