關於LinearLayout的高度問題

2021-08-18 14:23:38 字數 3075 閱讀 6900

死腦筋會讓你走很多彎路,但是你一定要改掉這個習慣

看原始碼,吐槽一下自己,我為什麼不看原始碼呢?傻嗎?找到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來顯示,直接...