2011-07-20 78 views
1

我遇到了Android版Mono的問題,並在ImageView中將繪圖添加爲背景圖像或圖像資源。我在我的可繪製文件夾中有一個名爲LogoLarge.png的文件,我想要顯示該文件。其Build Action設置爲AndroidResource。所以,我試試這個:添加繪圖到ImageView中

<ImageView 
    android:id="@+id/Logo" 
    android:src="@drawable/LogoLarge" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    /> 

LogoLarge資源在Resource.Designer.cs引用。建設項目工作正常。當我嘗試部署到模擬器,我得到的生成輸出如下:

C:\Program Files (x86)\MSBuild\Novell\mandroid.exe -v --nosign --sdk-dir="C:\Android" --builddir="C:\Users\Vegard\Documents\Visual Studio 2010\Projects\HelloAndroid\HelloWorld2\obj\Debug\android" --framework-dir="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v2.2" --framework-dir="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v1.0" -S="C:\Users\Vegard\Documents\Visual Studio 2010\Projects\HelloAndroid\HelloWorld2\obj\Debug\res" --package="HelloWorld2.HelloWorld2" --nolink --abi="armeabi" --java-sdk-dir="C:\Program Files\Java\jdk1.6.0_26" --debug --manifest-template="C:\Users\Vegard\Documents\Visual Studio 2010\Projects\HelloAndroid\HelloWorld2\Properties\AndroidManifest.xml" --sdk-platform="8" "C:\Users\Vegard\Documents\Visual Studio 2010\Projects\HelloAndroid\HelloWorld2\bin\Debug\HelloWorld2.dll" "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v2.2\Mono.Android.dll" "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v1.0\mscorlib.dll" "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v1.0\System.Core.dll" "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v1.0\System.dll" "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v1.0\System.Xml.dll" "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v1.0\System.Xml.Linq.dll" 
monodroid : error 1: System.NullReferenceException: Object reference not set to an instance of an object [C:\Users\Vegard\Documents\Visual Studio 2010\Projects\HelloAndroid\HelloWorld2\HelloWorld2.csproj] 
    at MonoDroid.Utils.ProcessRocks+<ReadStandardOutput>c__Iterator5.MoveNext() [0x00000] in <filename unknown>:0 
    at Monodroid.Toolbox.InvokeCommand (IEnumerable`1 commandLine) [0x00000] in <filename unknown>:0 
    at Monodroid.Toolbox.InvokeAapt (System.String packageName) [0x00000] in <filename unknown>:0 
    at Monodroid.Droidinator.CreatePackagedResources (System.Collections.Generic.List`1 javaTypes) [0x00000] in <filename unknown>:0 
    at Monodroid.Droidinator.CreateApk() [0x00000] in <filename unknown>:0 
    at Monodroid.MainClass.Main (System.String[] argv) [0x00000] in <filename unknown>:0 
Done Building Project "C:\Users\Vegard\Documents\Visual Studio 2010\Projects\HelloAndroid\HelloWorld2\HelloWorld2.csproj" (SignAndroidPackage target(s)) -- FAILED. 

如果我從XML文件中刪除android:src財產,並把這個在我的Activity1.cs文件,它的工作原理:

ImageView i = FindViewById<ImageView>(Resource.Id.Logo); 
i.SetImageResource(Resource.Drawable.LogoLarge); 

嘗試使用XML中的android:background="@drawable/SomeBackground"爲任何視圖設置背景圖像時也會出現同樣的問題,但在以編程方式執行時可以正常工作。

這裏發生了什麼。這是MonoDroid中的錯誤嗎?

+0

檢查你的AVD有什麼奇怪的東西?> –

+0

這是一個標準的Hello World應用程序(使用Visual Studio 2010創建的空白應用程序),並且此應用程序運行良好。只有當我嘗試在佈局XML文件中添加任何drawable時,它纔會崩潰。 AVD工作正常。 –

+0

我不認爲你可以把圖片/資源使用大寫的文件名。嘗試將LogoLarge.png更改爲logolarge.png並查看它是否有效。 –

回答

2

我認爲你的LogoLarge必須是logolarge,因爲你只能在drawables中使用小寫字母。

+0

你能詳細說明爲什麼這樣嗎?它似乎不是Android限制,但更多是對Monodroid的限制。 –

+1

它也在日食和其他IDE中,如IDEAJ和其他IDE。可繪製文件不得包含大寫字母:)在其他模式下,您將收到無效的文件名錯誤。 – Zwiebel

+0

除了'mandroid.exe'將AndroidResource文件修改爲小寫的資源名稱。目的是讓開發人員使用一致的資源框架,同時仍然適合Android的「一切都必須小寫」的要求。 – jonp