У меня есть этот файл макет из главы 13 Android Programming: The Big Nerd Ranch Guide:layout_weight в андроиде файл макет
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:src="@drawable/armstrong_on_moon"
android:contentDescription="@string/hellomoon_description"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerInside"
android:layout_weight="1"/>
<TableRow
android:gravity="center|bottom"
android:layout_weight="0">
<Button
android:id="@+id/hellomoon_playButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hellomoon_play"/>
<Button
android:id="@+id/hellomoon_stopButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hellomoon_stop"/>
</TableRow>
</TableLayout>
И это приводит к макету, который выглядит как this. То, что я не понимаю, как TableRow
проявляется в макете вообще, так как его layout_weight
является 0 и ImageView
«s layout_weight
равен 1. Я понимаю, что путь layout_weight
работы это первый будет уважать layout_width
и layout_height
каждого элемента , а затем разделите пространство между элементами на основе layout_weight
. Но так как ImageView
имеет match_parent
как для своих layout_width
, так и для layout_height
, не должен ли он занимать весь экран, а затем оставить ничего, чтобы разделить с TableRow
? Я считаю, что TableRow
также имеет match_parent
для своих layout_width
и layout_height
атрибутов, так как он унаследовал их от TableLayout
, но так как он пришел второй, я подумал, что ImageView
будет доминировать на экране. Кроме того, даже если ImageView
не должен занимать весь экран, не являются layout_weights
, говоря, что ImageView
должен получить 100% оставшегося пространства, а TableRow
должен получить 0%? Кроме того, когда я увеличиваю layout_weight
TableRow
, TableRow
просто получает больше и больше от экрана, так как он увеличивается больше, но я думал, что это должно увеличить пространство, которое TableRow
занимает на экране. Может кто-нибудь объяснить, что я не понимаю здесь.
В случае это помогает, мое понимание для layout_weight
приходит из этого примера в книге:
**How android:layout_weight works**
...
LinearLayout makes two passes to set the width of a view. In the first pass, LinearLayout looks at layout_width (or layout_height, for vertical orientation). The value for layout_width for both the Button and CheckBox is now wrap_content, so each view will get only enough space to draw itself (Figure 8.12).
...
In the next pass, LinearLayout allocates any extra space based on the values for layout_weight.