2011-03-04 4 views
0

私は自分の.xmlファイルを消去し、すべてのファイルのヘッダーとフッターの要素をアウトソースしました。その後私のプロジェクトはエラーに遭遇しますが、8つのファイルのうちの2つにしか実行されません。実際には何も含めません

古いコード:

<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"> 

なぜそれがほとんどすべてのファイルで動作するのでしょうか?それはちょうどコピー&ペーストで、残りはすべて同じです。

+0

エラーがあるファイルとそれに含まれるファイルを含めることはできますか? –

+1

回答を正しいとマークすることを検討してください。あなたと回答者の両方に利益をもたらし、他の人があなたの質問に将来的に答えさせるよう促します。 –

答えて

0

おそらくRelativeLayoutを使用して、タイトルバーの下に物を置くことができます。インクルード内のIDを検索しないため、<include />タグにIDを配置する必要があります。奇妙な問題が、簡単な修正:

<include 
    layout="@layout/header" 
    android:id="@+id/ImageView01" /> 
+0

私はそれがうまくいくことを願っています。音が論理的に聞こえる;) –

+0

それは働いたが、私はなぜいくつかの.xmlファイルで動作しないし、他の人ではそれが動作しない。今、私はすべてのインクルードにIDを追加しましたが、それでも機能しました –

+0

ええ、私もそれを見つけました、そしてそれは奇妙です。バグレポートの価値があるかもしれませんが、修正するのは簡単です。 –

5

この1つは本当に私の思考の多くを取り、最終的に信じないで終わった....

私はRelativeLayoutを使用して正確に同じ問題を抱えていました

私の.xmlファイルの一部に、インクルード内のIDを参照できます。他人ではない。

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> 

これは、layout_head.xmlの下にアルファベット順に並んだすべてのxmlファイルで動作することがわかりました。ら出来上がり - - だから私はをaalayout_head.xmlそしてもちろんする改名さlayout_head.xmlは、新しい名前にステートメントを含めるを切り替えるすべてのファイルに作品...

はEclipseプラグインでの問題ではなく、しているようですAndroidシステム自体。

Wierd enougしかし、ありがたいことに、今は完璧に動作しています。

Btw:android:layout_below = "@ id/cell1"を使用したとき、私のレイアウトがうまくいかなかった理由はありますか?

+0

私のために働いた。ありがとう!非常に奇妙なバグ... – Ofir

+0

私はIntellijIDEAで同じ問題を抱えていましたが、このトリックも私の問題を解決しました。 –

0

私はjohnnycubeの答えを試しましたが、それは私のためにそれを修正しませんでした。問題は、<include>が完了したときにaaptが各リソースディレクトリに対して-Sパラメータを必要とすることになります。何らかの理由で、ADTはこれを正しく行うことはできません。また、-Sが複数使用されている場合は、aaptには--auto-add-overlayが必要です。言うまでもなく、ADTはaaptコマンドの変更をサポートしていないので、状況を検出して-S <dir> --auto-add-overlayを追加するaaptのラッパーを作成しました。スクリプトは以下の通りです。 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) 
関連する問題