Включить не включает ничего - PullRequest
0 голосов
/ 05 марта 2011

Я только что очистил свои файлы .xml и передал на внешний подряд элементы заголовка и нижнего колонтитула каждого файла.после этого мой проект сталкивается с ошибкой, но только в 2 из 8 файлов.

старый код:

<ImageView
android:layout_width =                      "wrap_content"
android:id =                                "@+id/ImageView01"
android:layout_height =                     "60dp"
android:src =                               "@drawable/logo"
android:scaleType =                         "fitXY">

и новый код:

<include layout="@layout/header" /

В сообщении об ошибке говорится: «Не найдено ни одного ресурса, соответствующего указанному имени (в 'layout_below' со значением '@ id / searchRelativeLayout')

<LinearLayout 
    android:id =                        "@+id/SearchRelativeLayout"
    android:layout_width =              "fill_parent"
    android:layout_height =             "wrap_content"
    android:orientation =               "horizontal"
    android:layout_below =              "@id/ImageView01"
    android:gravity =                   "center"
    android:layout_marginTop =          "5dip"
    android:paddingRight =              "5dip"
    android:paddingLeft =               "5dip">

Я не могу представить, почему он работает почтикаждый файл, но не в этих двух. Это просто скопировать и вставить, а все остальное одинаково.

Ответы [ 3 ]

5 голосов
/ 15 апреля 2011

Этот действительно заставил меня задуматься и, в конце концов, оказался в неверии ....

У меня была точно такая же проблема при использовании RelativeLayout с include

В некоторых моих XML-файлах я мог ссылаться на id внутри include.В других нет.

layout_head.xml содержит макет для включения.Я использовал следующее утверждение:

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

<include android:id="@+id/cell1" layout="@layout/aalayout_head" />

<ListView android:id="@+id/main_list" android:layout_width="fill_parent"
    android:layout_height="wrap_content"     android:layout_below="@id/layout_spacer" />

</RelativeLayout>

Я видел, что это работает в каждом XML-файле, который был в алфавитном порядке ниже layout_head.xml.Поэтому я переименовал layout_head.xml в aalayout_head.xml и, конечно, переключил оператор include на новое имя - et voila - работает в каждом файле ...

Кажется, проблема сплагин Eclipse, а не сама система Android.

Странно, но, к счастью, теперь он работает без нареканий.

Кстати: любая идея, почему мой макет не работает, когда я использовал android: layout_below = "@id / cell1 "?

0 голосов
/ 01 ноября 2012

Я попробовал ответ johnnycube, но это не помогло мне. Проблема заканчивается тем, что aapt нужен параметр -S для каждого каталога ресурсов, когда <include> сделано. По какой-то причине ADT не делает это правильно. Кроме того, когда используется несколько -S, aapt необходимо --auto-add-overlay. Само собой разумеется, ADT не поддерживает изменение команды aapt, поэтому я закончил писать обертку вокруг aapt, которая бы выявила ситуацию и добавила -S <dir> --auto-add-overlay. Сценарий ниже. Вам нужно изменить KEY, чтобы определить изменяемый вами проект, и DIR, чтобы он был относительной ссылкой на каталог /res/ вашего библиотечного проекта.

#!/usr/bin/env python
KEY=r'name-of-your-directory'
DIR='/../../path/to/your/include/res/'

import os
import re
import sys

mydir = os.path.dirname(os.path.realpath(__file__))
real_aapt = "%s/%s" % (mydir,"aapt-real")
#args = sys.argv[1:]
args = sys.argv

found=False
nextisdir=False
newargs=[]
for arg in args:
    if re.search(KEY,arg):
        found=True
    if nextisdir:
        nextisdir=False
        newargs.append("--auto-add-overlay")
        newargs.append("-S")
        newargs.append(arg+DIR)
    if found and arg == '-S':
        nextisdir=True

os.execv(real_aapt,args+newargs)
0 голосов
/ 05 марта 2011

Вы, вероятно, используете RelativeLayout, чтобы разместить вещи под заголовком. Вам также необходимо поместить идентификатор в тег <include />, потому что он не ищет идентификаторы внутри включения. Странная проблема, но простое решение:

<include 
    layout="@layout/header" 
    android:id="@+id/ImageView01" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...