Я не смог найти что-нибудь там, чтобы выровнять виджет от RelativeLayout до виджета в горизонтальном LinearLayout. Выравнивание от одного макета к другому почти не упоминается в Интернете. Я думал, что мой вопрос может быть проще всего объяснить с изображением. Пожалуйста, простите за грубый рисунок:Выравнивание элементов Android с относительной компоновкой с динамическим размером в разных линейных компоновках
Это действительно подводит итог, что я пытаюсь сделать. Зеленый - это относительный макет, а синий - горизонтальный линейный макет с каждым элементом, имеющим ширину «match_parent» и весом «1» для равного распределения по линейной компоновке - цель этого заключается в том, чтобы использовать преимущества более широких экранов и ландшафтный режим, расширяя элементы BE, самую важную информацию в моем приложении.
У меня есть изображение статического размера (A) слева от линейного макета. Линейная компоновка расположена относительно 5dp справа от A. Элементы B-D имеют правую позицию 8dp для интервала. F - пара TextViews, которые выровнены с началом A. G - пара TextViews, которые выровнены справа от экрана.
То, что я хочу сделать, это:
- Выровнять вправо (конец) F с правой (конец) Б.
- Совместите левый (начало) G с левой (начало) of C.
- Поддерживайте это соотношение, когда устройство поворачивается в ландшафтном режиме.
Я попытался совместив alignEnd, alignToEnd и AlignRight относительных виджетов макета для виджетов в линейной компоновки, но Android-студия отвергает, что, поскольку они не являются братьями и сестрами в RelativeLayout. Я мог бы сделать это программно и вычислить его в PreDrawListener (добавьте ширину A + 5dp + width of B), но я предпочел бы сделать это в макете, если это возможно.
Вот мой макет XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="210dp"
android:background="#FFFFFF">
<ImageView
android:id="@+id/imageView"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginBottom="1dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="9dp"
android:cropToPadding="false"
android:src="@drawable/avatar"/>
<TextView
android:id="@+id/Name"
android:layout_width="wrap_content"
android:layout_height="31dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="155dp"
android:ellipsize="end"
android:gravity="center_vertical|left"
android:paddingTop="3dp"
android:text="Name"
android:textColor="#000000"
android:textSize="22sp"/>
<TextView
android:id="@+id/id"
android:layout_width="150dp"
android:layout_height="24dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="185dp"
android:ellipsize="end"
android:gravity="top|left"
android:paddingTop="-5dp"
android:text="ID"
android:textColor="#000000"
android:textSize="18sp"/>
<TextView
android:id="@+id/age"
android:layout_width="150dp"
android:layout_height="24dp"
android:layout_marginLeft="155dp"
android:layout_marginTop="185dp"
android:ellipsize="end"
android:gravity="top|left"
android:paddingTop="-5dp"
android:text="Age"
android:textColor="#000000"
android:textSize="18sp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="159dp"
android:layout_marginLeft="160dp"
android:orientation="horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="8dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/pTitle"
android:layout_width="match_parent"
android:layout_height="30dp"
android:gravity="center"
android:text="Title"
android:textColor="#ffffffff"
android:textSize="14sp"
android:textStyle="bold"/>
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/chart1"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="8dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/rTitle"
android:layout_width="match_parent"
android:layout_height="30dp"
android:gravity="center"
android:text="Title"
android:textColor="#ffffffff"
android:textSize="14sp"
android:textStyle="bold"/>
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/chart2"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="8dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/hTitle"
android:layout_width="match_parent"
android:layout_height="30dp"
android:gravity="center"
android:text="Title"
android:textColor="#ffffffff"
android:textSize="14sp"
android:textStyle="bold"/>
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/chart3"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/sTitle"
android:layout_width="match_parent"
android:layout_height="30dp"
android:gravity="center"
android:text="Title"
android:textColor="#ffffffff"
android:textSize="14sp"
android:textStyle="bold"/>
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/chart4"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
Возможно ли это? Благодарю.
Опубликуйте XML, что у вас есть до сих пор – CAS
Невозможно выровнять 'Views' через' ViewGroups'. Мое предложение состоит в том, что вы пытаетесь удалить «LinearLayout» из уравнения. Поместите все 'Views' внутри' RelativeLayout', а затем вы можете правильно их выровнять. Если это не вариант, вы всегда можете просто установить положение и размер «Представлений», которые вы хотите выровнять программно. Но найти решение, которое просто полагается на xml, явно предпочтительнее. –
Я бы, вероятно, использовал пользовательский класс «ViewGroup» с собственной реализацией метода 'onLayout' – pskink