android include tag - неверная ссылка на макет

У меня проблема с включением другого макета с помощью тега включения в XML-файле макета Android. При указании ссылки на макет ( @layout/...) я получаю исключение InflateException в Eclipse ADT со следующей ошибкой: InflateException: необходимо указать действительную ссылку на макет. Идентификатор макета @layout/func_edit_simple_calculator_toolbox недопустим.

ссылка должна быть действительной, так как я выбрал ее из списка других моих макетов и не набрал ее. Я использую Android SDK v2.1

это файлы макетов

func_edit_simple_calculator_toolbox.xml

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

<TableRow android:id="@+id/TableRow01" android:layout_width="wrap_content"android:layout_height="wrap_content">
<Button android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1"></Button>
<Button android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="2"></Button>
<Button android:id="@+id/Button03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="3"></Button>
<Button android:id="@+id/Button04" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="+"></Button>
</TableRow>
<TableRow android:id="@+id/TableRow02" android:layout_width="wrap_content" android:layout_height="wrap_content">
<Button android:id="@+id/Button05" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="4"></Button>
<Button android:id="@+id/Button06" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="5"></Button>
<Button android:id="@+id/Button07" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="6"></Button>
<Button android:id="@+id/Button08" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="-"></Button>
</TableRow>
</TableLayout>

function_editor_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

<com.calculoid.FunctionView android:id="@+id/function_view" android:layout_width="fill_parent" android:layout_height="fill_parent"/>

<include android:id="@+id/include01" android:layout_width="wrap_content" android:layout_height="wrap_content" layout="@layout/func_edit_simple_calculator_toolbox"></include>
</LinearLayout>

Кто-нибудь знает, в чем может быть проблема?

заранее спасибо

8 ответов

Решение

Я думаю, что я должен упомянуть, как я решил ту же проблему. Пробовал чистить проект и не работал. У меня довольно большие имена для макета (chrono_first_small_field), и это тоже не было причиной.

Закрыл Eclipse, и просто открыл его снова, и это сработало.

Это имеет больше смысла, чем реализация метода onMeasure:-)

Если кто-то наткнется на эту тему в поисках этой ошибки:

Caused by: android.view.InflateException: You must specifiy a layout in the include tag: <include layout="@layout/layoutID" />

Убедитесь, что вы делаете:

<include layout="@layout/your_layout" />

а не:

<include android:layout="@layout/your_layout" />

layout не должен иметь android: перед ней.

Я не вижу в этом ничего плохого, так что это немного странно. Я могу думать только о двух вещах: 1) Вы пытались использовать более короткое имя файла? Есть несколько ограничений на то, что является приемлемым в имени файла, например, отсутствие прописных символов или символов, чтобы гарантировать совместимость и длину имени файла, которые могут быть одним из них. 2) Вы пытались удалить некоторые из своих android:... утверждений во включенном, и оставить его на только <include layout="@layout/..."/>? На самом деле вам не нужно указывать его высоту и ширину во включении, как это уже определено в импортированном файле макета.

Проверить на пустое

<include>
</include>

теги (вероятно, вызванные автоматическим форматированием кода).

Они могут появиться где-то "скрытые" в вашем XML.

Для тех, кто использует Xamarin Studio - я добавил несколько файлов AXML из другого проекта, а также получил точно такую ​​же ошибку. Я просто выключил и перезапустил Xamarin Studio (ПК), и это также решило проблему. Интересно, что у разных IDE такая же проблема.

Я "решил" проблему, но я не знаю, что действительно помогло. Мои файлы макетов не прошли существенную переписку и практически не содержат их. Единственное заметное изменение, которое я сделал до того, как проблема исчезла, состояло в том, чтобы переопределить метод onMeasure (int, int) в моем классе пользовательского представления, при этом реализация просто вызывала setMeasuredDimension( 100, 100).

Для меня проблема заключалась в том, что название макета было неправильным: я использовал "-" вместо "_". AndroidStudio не говорил мне, что что-то не так, пока я не попытался развернуть приложение

Запустите eclipse с опцией -clean, и ваша проблема будет исправлена. Хотя запуск займет около 30 секунд

Другие вопросы по тегам