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 секунд