Почему вложенный макет не принимается Android?

#android #android-layout

#Android #android-layout

Вопрос:

Есть такая структура вложенного макета:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="@android:color/black">

<ViewGroup
    android:layout_width="94dp"
    android:layout_height="54dp"
    android:layout_alignParentTop="true"
    android:layout_alignParentEnd="true"
    android:id="@ id/view">

    <ImageView
        android:id="@ id/loggedInUserImageView"
        android:layout_width="66dp"
        android:layout_height="66dp"
        android:layout_alignParentTop="true"
        android:layout_alignEnd="@ id/view" />

</ViewGroup>
</RelativeLayout>
  

Но возникает проблема с рендерингом. Почему? В чем проблема?

Комментарии:

1. Закрываю вас </RelativeLayout> ?

2. ViewGroup является abstract классом. Вы не можете иметь экземпляр ViewGroup на Java или использовать его как элемент в XML-ресурсе layout. Вам нужно использовать конкретный подкласс ViewGroup (например,, FrameLayout , LinearLayout , RelativeLayout , TableLayout , ConstraintLayout ).

Ответ №1:

В этом случае у вас не может быть дочернего элемента ViewGroup. Потому что у вас нет атрибута / свойства для позиционирования дочернего представления. Таким образом, он выдаст ошибку при рендеринге. У вас есть все варианты использования различных макетов, предоставляемых Android, поскольку они также расширяются только из ViewGroup.

Если вы хотите использовать ViewGroup, лучше расширьте его, а затем используйте расширенный класс.

Надеюсь, это поможет вам понять.

Ответ №2:

Вы не можете использовать ViewGroup внутри XML-файла, использовать LinearLayout , RelativeLayout и т.д. Или создать пользовательский ViewGroup , расширив его.

Ответ №3:

Вы пытаетесь создать экземпляр абстрактного класса (ViewGroup). Создайте свой пользовательский вид, который расширяет ViewGroup, после этого вы имеете право создать свой пользовательский вид.