2017-01-11 1 views
0

Я в настоящее время борется с <include> макетов и обязательным тегом <layout>.Android Databinding: включают в себя силы <layout> тег?

У меня есть библиотека, которая определяет макет панели инструментов, который должен использоваться другими артефактами, независимо от того, используют ли они Databinding или нет.

Для того чтобы привязка данных к работе, макет панели инструментов необходимо обернуть внутри тега <layout>.

Поэтому я создал два разных варианта макета панели инструментов.

include_toolbar.xml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    .../> 

Я попытался повторно использовать определенную панель инструментов и обернуть его макет тегов, как этот

include_toolbar_binding.xml:

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android"> 

    <include 
     android:id="@+id/wrapper" 
     layout="@layout/include_toolbar"/> 
</layout> 

Но это не работает, как это, например, нужно снова обернуть, не так ли?

Есть ли какое-либо решение, которое не требует определения панели инструментов снова в (завернутой) привязке?

ответ

0

заключение: невозможно использовать <include> в качестве корневого тега. (также нет, если родительский номер <merge>). поэтому мне нужно определить панель инструментов в обеих макетах отдельно.

0

Вы должны рассмотреть возможность использования <merge>.

ваш toolbar.xml будет выглядеть следующим образом:

<merge> 
    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     .../> 
</merge> 

Источник: https://developer.android.com/training/improving-layouts/reusing-layouts.html

+0

Не работает, как это, см. Ответ выше – cwiesner

1

Android не поддерживает теги включают как корень. Я не могу вспомнить, поддерживает ли привязка данных связывание тегов с включенными флагами в корне, но я так не думаю. Вы можете попробовать и посмотреть. Если они не поддерживаются, это только привязка данных, поскольку Android обычно поддерживает ее.

Вы можете использовать:

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android=...> 
<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    .../> 
</layout> 

на панель инструментов. Затем вы можете загрузить его со связывающим загрузчиком нормальных данных:

IncludeLoaderBinding binding = IncludeLoaderBinding.inflate(inflater, ...); 

или вы можете использовать ненужные данные связывания инфляции:

View included = inflater.inflate(...); 

Android Data Binding будет правильно раздеть файл макета так, что могут использоваться без привязки данных. Вы можете столкнуться с некоторыми проблемами, если вы используете строковые теги по мере их замены, и любое связующее выражение будет удалено. Если вы используете простой макет, как вы упомянули, у вас не будет никаких проблем, включая его как из файла макета привязки данных, так и файла макета привязки данных.

- редактировать -

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

+0

с использованием '' не работает. В том числе тег '' не работает, так как я хочу включить макет в xml-файл и не раздувать его по коду. – cwiesner

+0

Вы также можете включить его в другой макет. –

+0

Я определяю этот макет в библиотеке, которая используется приложениями, которые могут ** или не могут использовать databinding. если они этого не делают, я не могу обернуть его тегом ''. – cwiesner

Смежные вопросы