Чтобы надеяться объяснить, взгляните на Design Philosophy для фрагментов в Руководстве разработчика.
Если вы посмотрите на изображение, слева показано, как телефон отобразит начальное действие A, которое затем запустит действие B при выборе элемента в списке.
Справа, однако, показано, как эти два действия могут быть показаны как фрагменты одновременно. Обратите внимание, что фрагмент A занимает 1/3 экрана, а фрагмент B занимает 2/3 экрана.
Теперь посмотрите на XML для этого макета из Добавление фрагмента к действию из той же статьи в Руководстве разработчика ...
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment android:name="com.example.news.ArticleListFragment"
android:id="@+id/list"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
<fragment android:name="com.example.news.ArticleReaderFragment"
android:id="@+id/viewer"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>
Вы можете видеть, что оба фрагмента имеют layout_width
0dp, но каждый из них также имеет атрибут layout_weight
. Первый имеет вес 1, а второй вес 2.
Короче говоря, при использовании подобного макета установка 'width' равным 0 означает, что вы не хотите явно применять ширину и что ОС должна вычислять относительные ширины как доли от общего веса. Другими словами, 1 + 2 = 3 (общий вес), но первое действие требует ширину 1 / общий вес = 1/3 ширины экрана, а фрагмент B хочет 2 / общая ширина = 2/3 ширины экрана.
Теперь предположим, что вы добавили третий фрагмент, который также имеет width = 0dp и weight = 2. В этом случае общий вес составляет 1 + 2 + 2 = 5, а первый фрагмент будет иметь относительную ширину 1/5, а два других фрагмента - 2/5 экрана или 20% / 40% / 40%.