1

Я не смог найти что-нибудь там, чтобы выровнять виджет от RelativeLayout до виджета в горизонтальном LinearLayout. Выравнивание от одного макета к другому почти не упоминается в Интернете. Я думал, что мой вопрос может быть проще всего объяснить с изображением. Пожалуйста, простите за грубый рисунок:Выравнивание элементов Android с относительной компоновкой с динамическим размером в разных линейных компоновках

enter image description here

Это действительно подводит итог, что я пытаюсь сделать. Зеленый - это относительный макет, а синий - горизонтальный линейный макет с каждым элементом, имеющим ширину «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> 

Возможно ли это? Благодарю.

+0

Опубликуйте XML, что у вас есть до сих пор – CAS

+0

Невозможно выровнять 'Views' через' ViewGroups'. Мое предложение состоит в том, что вы пытаетесь удалить «LinearLayout» из уравнения. Поместите все 'Views' внутри' RelativeLayout', а затем вы можете правильно их выровнять. Если это не вариант, вы всегда можете просто установить положение и размер «Представлений», которые вы хотите выровнять программно. Но найти решение, которое просто полагается на xml, явно предпочтительнее. –

+0

Я бы, вероятно, использовал пользовательский класс «ViewGroup» с собственной реализацией метода 'onLayout' – pskink

ответ

0

ОК, вот как я ее решил:

// Pre-Draw Task 
ViewTreeObserver userImageVTO = userImage.getViewTreeObserver(); 
userImageVTO.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
    public boolean onPreDraw() { 

     // Set Alignment Widths 
     name.setWidth(imageView.getWidth() + ((imageView.getWidth()/150) * 5) + chart1.getWidth()); // Get the Pixel Density (Since Image is 150dp) for 5dp of Padding 
     age.setWidth(chart1.getWidth()); 

     return true; 
    } 
}); 

Это в моем обычае ListAdapter в GetView(). Я вычислил ширину F с размером изображения размером 150dp (размером 150dp) и размером (5dp), а также полученную ширину диаграммы1. Затем, в XML я добавил это к G:

android:layout_toRightOf="@id/age" 
android:layout_marginLeft="8dp" 

Это позволяет G расширить/контракт на ротации, так как это установлено, чтобы всегда быть 8dp справа от F.

расположение
Смежные вопросы