这里汇总了用C#和VS2015开发Android App时一些常见的最基本的问题及解决办法,以后有新的问题时都在这里一并回答。
问题1:项目无法正常运行,怎么回事?
【解答】
正常情况下,选择某个模拟器以后,它会自动启动并将程序部署到模拟器上。
如果是新建的项目出现的问题,一般都是环境安装不正确造成的。
如果是自己编写程序后出现的问题,一般都是清单配置不合适造成的。
不论是哪种情况,都可以通过下面的步骤找错。
(1)检查项目配置
主菜单-->【工具】-->【选项】-->【Xamarin】,查看环境配置是否正确。注意下面界面中的绿色选项和复选框都要正确。
(2)检查版本是否符合要求
按<F5>键调试之前,要确保你选择的模拟器和你的清单配置一致。
查看清单配置:在解决方案资源管理器中,双击【Properties】文件夹,在弹出的项目属性配置界面中,查看最低版本(第2项)是否满足你启动的模拟器版本要求:
(3)通过输出窗口查找错误
观察运行后【输出】窗口输出的内容,看是否有错误信息。
注意下面截图中下拉框中的几个选项都要看看是否有错。
一般都能从这个输出窗口输出的信息中看到是什么问题。
如果还找不到问题,就用logcat查看(下一步)。
(4)用logcat查看错误
点击启动logcat的快捷键以后,就会出现下面的界面:
单击上面的【Change Device】快捷键,就会出现下面的界面:
这个截图表示你还没有启动模拟器,此时,要确保按<F5>键时已经选择了某个模拟器:
选择模拟器后按<F5>键,它就会自动启动你选择的模拟器。
如果这个截图中没有可选择的模拟器,说明你的模拟器创建有问题。
(5)检查logcat输出的信息
如果你是独立启动的模拟器,而不是通过按<F5>键启动它,如下图所示:
当你选择的模拟器启动后,再次按照第(4)步那样运行logcat,应该看到下面的界面:
选中它找到的模拟器,按【OK】,然后观察它输出的内容:
(6)检查清单配置是否有错
注意清单文件(AndroidManifest.xml)中的首行:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="MyDemos.MyDemos" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">
这个android:installLocation="auto"表示如果找不到对应的.so文件,它会自动将其安装到模拟器上。
通过上面的步骤,一般都能把问题解决掉。
如果还找不到问题,请把步骤说详细点并截图,否则别人也看不明白你的问题是什么。
问题2:如何将文件复制到模拟器的SD卡上
【问题描述】有时候需要在模拟器上模拟用户通过手机下载的文件或程序,比如将音乐文件或视频文件从硬盘复制到模拟器的SD卡上,有没有简单的操作办法呢?
【解答】
办法如下:
1、找到你创建的模拟器文件,例如:
C:\Users\用户名\.android\avd\Galaxy_Api19.avd\sdcard.img
或者
C:\Users\用户名\.android\avd\Galaxy_Api23.avd\sdcard.img
2、用UltraISO或者其他虚拟光驱软件打开这个文件,然后复制硬盘上的文件,粘贴到该文件中SD卡对应的目录下,比如粘贴到Download文件夹下,然后保存.img文件。
以后再打开模拟器,就能看到Download文件夹下已经有这些文件了。这些文件的用法和你将文件下载到手机上以后的用法相同。
问题3:Resources.GetDrawable()被标记为已过时,如何解决?
Resources类中有两个静态方法从API level 22开始被标记为已过时:
过时的方法:
Resources.Drawable GetDrawable(int id)
替代方法1:
Context.GetDrawable(int)
其中,Context为上下文对象,例如:this. GetDrawable(…)
替代方法2:
Drawable Resources.GetDrawable(int id, Resources.Theme theme)
其中,第二个参数@theme可以为null。.
过时的方法:
Drawable Resources.GetDrawableForDensity(int id, int density)
替代的方法:
Drawable Resources.GetDrawableForDensity(int id, int density, Resources.Theme theme)
其中,第二个参数@theme可以为null。.
这两个方法被标记为已过时的原因:在比Android 4.1版本更低的版本中,当传递的资源ID是另一个Drawable资源的别名时,过时的方法不能正确地获取到最终配置density,即别名资源(alias resource)的density配置不同于实际资源导致返回的Drawable对象的density不正确,这样缩放时将出错。
问题4:创建或编辑.cs文件时,有时会出现基类颜色不变且智能提示失效的情况,怎么回事?
这是因为你刚添加的资源文件(比如布局文件)有错,在你更正这些错误之前,它不希望你继续编辑.cs文件,因为继续编辑会导致更多错误。
解决办法:查看你刚添加的资源文件(.xml或者.axml),把错误更正后,基类颜色和智能提示就会自动变为可用,此时就可以继续编辑.cs文件了。