未处理的异常:Android.Views.InflateException:二进制 XML 文件行 #1:二进制 XML 文件行 #1:膨胀 class 片段时出错
Unhandled Exception: Android.Views.InflateException: Binary XML file line #1: Binary XML file line #1: Error inflating class fragment occurred
我正在尝试将 google 映射集成到 Xamarin Android。但是,如标题中所写,收到错误。此错误出现在我的 SetContentView (Resource.Layout.Main); 上,如下所示,其中:
Error occurred in MainActivity.cs
我的 google 地图播放服务是 up-to-date。我试过清理和重建项目,重新启动 VS 对我也不起作用。没有一个论坛回答了我的问题。
这些是在我的项目中写的:
MainActivity.cs
using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Gms.Maps;
namespace Google_maps.Droid
{
[Activity (Label = "@string/Google_maps.Android", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity, IOnMapReadyCallback
{
private GoogleMap mMap;
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
SetUpMap();
}
private void SetUpMap()
{
if (mMap == null)
{
FragmentManager.FindFragmentById<MapFragment>(Resource.Id.map).GetMapAsync(this);
}
}
public void OnMapReady(GoogleMap googleMap)
{
mMap = googleMap;
}
}
}
Main.axml
<?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">
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"/>
</LinearLayout>
Strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, Click Me!</string>
<string name="app_name">Google_maps.Android</string>
<string name="google_maps_key">my_API_key</string>
<string name="Google_maps.Android">Google maps</string>
</resources>
最后,
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="Google_maps.google_mapsAndroid" android:installLocation="preferExternal">
<uses-sdk android:minSdkVersion="15" />
<application android:label="Google_maps.Android" android:icon="@drawable/Icon">
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
<meta-data android:name="com.google.android.maps.V2.API_KEY" android:value="@string/google_maps_key" />
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
</manifest>
有关其他信息,我遵循了 youtuber Joe Rock 的方法,他教我们如何设置 google 地图。这是他视频的 link:
https://www.youtube.com/watch?v=W6Q0olRPsus
如果你看看评论区,你会发现很多人也有同样的问题。这个视频是2 年前 制作的,所以我能理解为什么它在当前情况下无法播放。但是,如果你们能指导我将 google 地图集成到我的 android 移动应用程序的正确方法,我将不胜感激,如果不知何故,这种方法不再可靠。提前谢谢你。
此致,
Xamarin 和编程新手。
编辑:
当我将鼠标拖到 SetContentView (Resource.layout.Main)
时,它显示 void Activity.SetContentView(int LayoutResID)(+2 重载)
在布局资源上设置 activity 内容。
我应该担心这个吗?
尝试:
变化:
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"/>
收件人:
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.SupportMapFragment"/>
此外,在您的 SetUpMap() 方法中更改如下:
FragmentManager.FindFragmentById<MapFragment>(Resource.Id.map).GetMapAsync(this);
用于:
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
1.Install 来自 Nuget 的 Appcompact dll
2.Use AppCompatActivity 而不是 Activity
3.Add 在您的 AndroidManifest 中的以下权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.INSTALL_LOCATION_PROVIDER"/>
<uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
4.Add xml 在你的 main.axml
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.MapFragment" />
5.Add下面的代码在你的styles.xml下resource/values/styles:
<style name="MyTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="colorPrimary">#FFCC01</item>
<item name="colorPrimaryDark">#E69D02</item>
<item name="colorControlHighlight">#FFCC01</item>
<item name="colorAccent">#D5012A</item>
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>
<style name="DrawerArrowStyle"
parent="@style/Widget.AppCompat.DrawerArrowToggle">
<item name="spinBars">true</item>
<item name="color">@color/colorRedText</item>
</style>
<style name="MyTheme" parent="MyTheme.Base">
</style>
6.Make 我的主题作为您的默认应用程序主题,方法是在您的 AndroidManifest.xml 文件中添加以下行,您可以在当前 android 项目下方的项目属性下找到该文件。
<application android:label="YourAppName" android:theme="@style/MyTheme" android:hardwareAccelerated="true" android:largeHeap="true" android:icon="@drawable/YourAppIcon">
如果您不明白任何内容,您可以在这里查看:
https://developer.xamarin.com/guides/android/platform_features/maps_and_location/
还要检查您的 AndroidSdk 中是否有 Google 播放服务,您可以在 VS-15 工具的工具栏中找到它>Android>AndroidSdk
在 Extras 下安装 Google Play 服务。
所以我的项目无法打开,在这种情况下我不得不从头开始 re-create 我的项目。我对我的模拟器进行了更改,我认为这可能一直是问题所在,并设法让它工作并删除了标题上的错误。
虽然,目前唯一的问题是,它只在左下角显示"google"标志,但没有地图。我可能应该在另一个线程中写这个?因为现在不同了。
但到目前为止,错误已被删除,我相信设备和 android 版本在其中起着重要作用。
编辑:
您好,我已经设法让 google 地图在我的应用程序上完全正常运行。正如我之前所说,"the devices and android version, plays a big role in developing applications"。仅供参考,我使用的是 Android 7.1 版(Nougat),Nexus 5 设备,Google API x86 - API 25。
在属性中将编译器设置为 8.0 (Oreo) >> 在属性中将应用程序和目标设置为 "Use Compile Using SDK Version" >> Android Manifest.
通过 NuGet 包管理器更新您的 GoogleXamarin Inc. 地图包,在 工具[=54= 中找到] 到 最新的稳定版本 。我目前最新的稳定版本是 42.1021.1。
更新您的 Xamarin.Android.Support.Compat by Xamarin Inc. 从 Nuget Package Manager,在 tools 中找到最新稳定版。我目前最新的稳定版本是 26.0.2。如果片段库没有随之更新,只能手动更新。
我添加了可能缺少的权限,如下所示:
<permission android:name="googleMapsProject.googleMapsProject.droid.permission.MAPS_RECEIVE" android:protectionLevel="signature" />
<uses-permission android:name="com.deg.blubcnmobl.droid.permission.MAPS_RECEIVE" />
仅供参考 googleMapsProject.googleMapsProject 是您的包名。确保它不是以大写字母开头,并且与您在 google 控制台的密钥限制页面中写入的包名称相匹配。
- 所有这些都是 运行 在 google 地图 API 的 v2 上。
这几乎就是我让它工作的方式。希望这对您有所帮助!
我正在尝试将 google 映射集成到 Xamarin Android。但是,如标题中所写,收到错误。此错误出现在我的 SetContentView (Resource.Layout.Main); 上,如下所示,其中:
Error occurred in MainActivity.cs
我的 google 地图播放服务是 up-to-date。我试过清理和重建项目,重新启动 VS 对我也不起作用。没有一个论坛回答了我的问题。
这些是在我的项目中写的:
MainActivity.cs
using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Gms.Maps;
namespace Google_maps.Droid
{
[Activity (Label = "@string/Google_maps.Android", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity, IOnMapReadyCallback
{
private GoogleMap mMap;
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
SetUpMap();
}
private void SetUpMap()
{
if (mMap == null)
{
FragmentManager.FindFragmentById<MapFragment>(Resource.Id.map).GetMapAsync(this);
}
}
public void OnMapReady(GoogleMap googleMap)
{
mMap = googleMap;
}
}
}
Main.axml
<?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">
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"/>
</LinearLayout>
Strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, Click Me!</string>
<string name="app_name">Google_maps.Android</string>
<string name="google_maps_key">my_API_key</string>
<string name="Google_maps.Android">Google maps</string>
</resources>
最后,
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="Google_maps.google_mapsAndroid" android:installLocation="preferExternal">
<uses-sdk android:minSdkVersion="15" />
<application android:label="Google_maps.Android" android:icon="@drawable/Icon">
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
<meta-data android:name="com.google.android.maps.V2.API_KEY" android:value="@string/google_maps_key" />
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
</manifest>
有关其他信息,我遵循了 youtuber Joe Rock 的方法,他教我们如何设置 google 地图。这是他视频的 link:
https://www.youtube.com/watch?v=W6Q0olRPsus
如果你看看评论区,你会发现很多人也有同样的问题。这个视频是2 年前 制作的,所以我能理解为什么它在当前情况下无法播放。但是,如果你们能指导我将 google 地图集成到我的 android 移动应用程序的正确方法,我将不胜感激,如果不知何故,这种方法不再可靠。提前谢谢你。
此致, Xamarin 和编程新手。
编辑:
当我将鼠标拖到 SetContentView (Resource.layout.Main)
时,它显示 void Activity.SetContentView(int LayoutResID)(+2 重载)
在布局资源上设置 activity 内容。
我应该担心这个吗?
尝试:
变化:
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"/>
收件人:
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.SupportMapFragment"/>
此外,在您的 SetUpMap() 方法中更改如下:
FragmentManager.FindFragmentById<MapFragment>(Resource.Id.map).GetMapAsync(this);
用于:
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
1.Install 来自 Nuget 的 Appcompact dll
2.Use AppCompatActivity 而不是 Activity
3.Add 在您的 AndroidManifest 中的以下权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.INSTALL_LOCATION_PROVIDER"/>
<uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
4.Add xml 在你的 main.axml
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.MapFragment" />
5.Add下面的代码在你的styles.xml下resource/values/styles:
<style name="MyTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="colorPrimary">#FFCC01</item>
<item name="colorPrimaryDark">#E69D02</item>
<item name="colorControlHighlight">#FFCC01</item>
<item name="colorAccent">#D5012A</item>
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>
<style name="DrawerArrowStyle"
parent="@style/Widget.AppCompat.DrawerArrowToggle">
<item name="spinBars">true</item>
<item name="color">@color/colorRedText</item>
</style>
<style name="MyTheme" parent="MyTheme.Base">
</style>
6.Make 我的主题作为您的默认应用程序主题,方法是在您的 AndroidManifest.xml 文件中添加以下行,您可以在当前 android 项目下方的项目属性下找到该文件。
<application android:label="YourAppName" android:theme="@style/MyTheme" android:hardwareAccelerated="true" android:largeHeap="true" android:icon="@drawable/YourAppIcon">
如果您不明白任何内容,您可以在这里查看:
https://developer.xamarin.com/guides/android/platform_features/maps_and_location/
还要检查您的 AndroidSdk 中是否有 Google 播放服务,您可以在 VS-15 工具的工具栏中找到它>Android>AndroidSdk 在 Extras 下安装 Google Play 服务。
所以我的项目无法打开,在这种情况下我不得不从头开始 re-create 我的项目。我对我的模拟器进行了更改,我认为这可能一直是问题所在,并设法让它工作并删除了标题上的错误。
虽然,目前唯一的问题是,它只在左下角显示"google"标志,但没有地图。我可能应该在另一个线程中写这个?因为现在不同了。
但到目前为止,错误已被删除,我相信设备和 android 版本在其中起着重要作用。
编辑:
您好,我已经设法让 google 地图在我的应用程序上完全正常运行。正如我之前所说,"the devices and android version, plays a big role in developing applications"。仅供参考,我使用的是 Android 7.1 版(Nougat),Nexus 5 设备,Google API x86 - API 25。
在属性中将编译器设置为 8.0 (Oreo) >> 在属性中将应用程序和目标设置为 "Use Compile Using SDK Version" >> Android Manifest.
通过 NuGet 包管理器更新您的 GoogleXamarin Inc. 地图包,在 工具[=54= 中找到] 到 最新的稳定版本 。我目前最新的稳定版本是 42.1021.1。
更新您的 Xamarin.Android.Support.Compat by Xamarin Inc. 从 Nuget Package Manager,在 tools 中找到最新稳定版。我目前最新的稳定版本是 26.0.2。如果片段库没有随之更新,只能手动更新。
我添加了可能缺少的权限,如下所示:
<permission android:name="googleMapsProject.googleMapsProject.droid.permission.MAPS_RECEIVE" android:protectionLevel="signature" />
<uses-permission android:name="com.deg.blubcnmobl.droid.permission.MAPS_RECEIVE" />
仅供参考 googleMapsProject.googleMapsProject 是您的包名。确保它不是以大写字母开头,并且与您在 google 控制台的密钥限制页面中写入的包名称相匹配。
- 所有这些都是 运行 在 google 地图 API 的 v2 上。
这几乎就是我让它工作的方式。希望这对您有所帮助!