Что такое тег <view /> XML в макетах

При чтении исходного кода SnackBar из библиотеки дизайна я нашел этот вид XML-макета :

<view xmlns:android="http://schemas.android.com/apk/res/android" class="android.support.design.widget.Snackbar$SnackbarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" style="@style/Widget.Design.Snackbar" /> 

Я никогда не видел такого рода XML только с <view/> (с более низким V, так что это не класс View ).

Моя первая догадка заключается в том, что он работает как <fragment/> , указывая, что он должен создать пользовательский вид в соответствии с атрибутом class , но зачем использовать эту нотацию, когда он мог просто написать:

 <android.support.design.widget.Snackbar.SnackbarLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" style="@style/Widget.Design.Snackbar" /> 

??

большое спасибо

Solutions Collecting From Web of "Что такое тег <view /> XML в макетах"

На самом деле оба они одинаковы. В первом xml говорится, что это будет вид типа android.support.design.widget.Snackbar$SnackbarLayout (определенный в свойстве class )

  <view xmlns:android="http://schemas.android.com/apk/res/android" class="android.support.design.widget.Snackbar$SnackbarLayout" 

Во втором – прямое объявление с использованием пользовательского класса.

Второй формат можно использовать только в том случае, если пользовательское представление не определено как внутренний класс

Из документации для Android

Теперь у нас есть пользовательский компонент, но как мы можем его использовать? В примере NotePad пользовательский компонент используется непосредственно из декларативного макета, поэтому ознакомьтесь с примечанием note_editor.xml в папке res / layout.

 <view class="com.android.notepad.NoteEditor$MyEditText" id="@+id/note" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:drawable/empty" android:padding="10dip" android:scrollbars="vertical" android:fadingEdge="vertical" /> 

Пользовательский компонент создается как общий вид в XML, а класс задается с использованием полного пакета. Заметим также, что внутренний класс, который мы определили, ссылается на нотацию NoteEditor $ MyEditText, которая является стандартным способом ссылки на внутренние классы на языке программирования Java.

Если ваш пользовательский компонент View не определен как внутренний класс, вы можете, в качестве альтернативы, объявить компонент View с именем XML-элемента и исключить атрибут класса. Например:

  <com.android.notepad.MyEditText id="@+id/note" ... /> 

Обратите внимание, что класс MyEditText теперь является отдельным файлом класса. Когда класс вложен в класс NoteEditor, этот метод не будет работать.

Другими атрибутами и параметрами в определении являются те, которые передаются в конструктор настраиваемых компонентов, а затем передаются в конструктор EditText, поэтому они являются теми же параметрами, которые будут использоваться для представления EditText. Обратите внимание, что также можно добавить свои собственные параметры, и мы коснемся этого снова ниже.

И это все, что нужно. По общему признанию, это простой случай, но это то, что создает пользовательские компоненты только так сложно, как вам нужно.

Более сложный компонент может переопределить еще больше … методов и ввести некоторые из своих собственных вспомогательных методов, существенно настраивая его свойства и поведение. Единственный предел – ваше воображение и то, что вам нужно для выполнения этого компонента.