在 Xamarin 中膨胀类 android.support.design.widget.Coordinator 时出错
Posted
技术标签:
【中文标题】在 Xamarin 中膨胀类 android.support.design.widget.Coordinator 时出错【英文标题】:Error inflating class android.support.design.widget.Coordinator in Xamarin 【发布时间】:2019-09-22 16:03:24 【问题描述】:我收到一条错误消息,内容如下:
android.Views.InflateException: 'Binary XML file line #1: Binary XML file line #2: Error inflating class android.support.design.widget.Coordinator'
调试器在SetContentView(Resource.Layout.activity_main);
上运行和中断。
我目前正在使用 Visual Studio 16.3.0 预览版 3,因为我遇到了当前发布版本的问题,在此预览版中有 Xamarin android 错误修复。
当我从 activity_main.axml 中删除 <include layout="@layout/include_main"/>
时,我得到一个错误提示
System.NullReferenceException: '对象引用未设置为对象的实例。'
在 MainActivity.cs 中的 SupportActionBar.Title = "";
。
MainActivity.cs
using Android.App;
using Android.OS;
using Android.Support.V7.App;
using Android.Runtime;
using Android.Widget;
using System;
using Firebase.Database;
using Firebase;
using Android.Views;
namespace PaleteroGo
[Activity(Label = "@string/app_name", Theme = "@style/PaleteroTheme", MainLauncher = false)]
public class MainActivity : AppCompatActivity
FirebaseDatabase database;
Android.Support.V7.Widget.Toolbar mainToolbar;
Android.Support.V4.Widget.DrawerLayout drawerLayout;
protected override void OnCreate(Bundle savedInstanceState)
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_main); //debugger breaks here
ConnectControl();
void ConnectControl()
drawerLayout = (Android.Support.V4.Widget.DrawerLayout)FindViewById(Resource.Id.drawerLayout);
mainToolbar = (Android.Support.V7.Widget.Toolbar)FindViewById(Resource.Id.mainToolbar);
SetSupportActionBar(mainToolbar);
SupportActionBar.Title = ""; //then breaks here
Android.Support.V7.App.ActionBar actionBar = SupportActionBar;
actionBar.SetHomeAsUpIndicator(Resource.Mipmap.ic_help_action);
actionBar.SetDisplayHomeAsUpEnabled(true);
public override bool OnOptionsItemSelected(IMenuItem item)
switch (item.ItemId)
case Android.Resource.Id.Home:
drawerLayout.OpenDrawer((int)GravityFlags.Left);
return true;
default:
return base.OnOptionsItemSelected(item);
void Initializedatabase()
...
activity_main.axml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:id="@+id/drawerLayout"
android:fitsSystemWindows="true"
>
<LinearLayout
android:orientation="vertical"
android:layout_
android:layout_
>
<include
layout="@layout/include_main"
/>
</LinearLayout>
<android.support.design.widget.NavigationView
android:id="@+id/navView"
android:layout_
android:layout_
android:background="@color/paleteroWhite"
android:layout_gravity="start"
app:headerLayout="@layout/headerlayout"
app:menu="@menu/navmenu"
/>
</android.support.v4.widget.DrawerLayout>
include_main.xml
<android.support.design.widget.Coordinator
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rootView"
android:layout_
android:layout_>
<FrameLayout
android:layout_
android:layout_
android:background="@color/paleteroAsh"
>
<android.support.v7.widget.Toolbar
android:layout_
android:layout_
android:minHeight="?android:attr/actionBarSize"
android:id="@+id/mainToolbar"
/>
</FrameLayout>
</android.support.design.widget.Coordinator>
【问题讨论】:
你能显示你的include_main
xaml,它是否包含工具栏?如果没有,你可以像下面这样改变,然后检查它
是的,它确实实现了工具栏。已发布代码。
我也删除了工具栏 xml 代码,但仍然有相同的错误消息。
你试过下面的代码吗?从 include_main xaml 中删除工具栏
是的,这就是我的意思,我从 include_main 中删除了工具栏并尝试了您的代码,但同样的错误。
【参考方案1】:
尝试像这样改变:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_
android:layout_>
<android.support.v7.widget.Toolbar
android:minWidth="25dp"
android:layout_
android:layout_
android:minHeight="?attr/actionBarSize"
android:id="@+id/mainToolbar" />
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawerLayout"
android:layout_
android:layout_>
<include
layout="@layout/include_main"
android:layout_
android:layout_ />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_
android:layout_
android:layout_gravity="start"
app:headerLayout="@layout/headerlayout"
app:menu="@menu/navmenu"
/>
</android.support.v4.widget.DrawerLayout>
</LinearLayout>
include_main:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:orientation="vertical">
<FrameLayout
android:id="@+id/fragmentContainer"
android:layout_
android:layout_ />
</LinearLayout>
【讨论】:
我决定将actionBar.SetHomeAsUpIndicator(Resource.Mipmap.ic_help_action);
更改为actionBar.SetHomeAsUpIndicator(Resource.Mipmap.ic_menu_action);
,并将 ic_menu_action.png 图标添加到 mipmap 文件夹,现在得到类似的错误消息。 Unhandled Exception: Android.Views.InflateException: <Timeout exceeded getting exception details> 09-27 20:23:31.229 W/roGo.PaleteroG( 5103): Checksum mismatch for dex base.apk 09-27 20:23:31.229 W/roGo.PaleteroG( 5103): Could not merge the profile. Clearing the profile data.
在这种情况下也使用 Visual Studio 2017。
我应该一直使用最新的预览版吗?我正在等待更新完成。
没关系,我可以确认它在更新到 Visual Studio 16.4.0 预览版 1 后工作正常。
它看起来像不断来回。原因:android.view.InflateException: Binary XML file line #2: Error inflating class android.support.design.widget.Coordinator ...
而且还引起:java.lang.ClassNotFoundException:在路径上找不到类“android.support.design.widget.Coordinator”:DexPathList [[zip file“/data/app/PaleteroGo .PaleteroGo-OVejOH8Y-YE04grCXVNgBQ==/base.apk"],nativeLibraryDirectories=[/data/app/PaleteroGo.PaleteroGo-OVejOH8Y-YE04grCXVNgBQ==/lib/x86, /data/app/PaleteroGo.PaleteroGo-OVejOH8Y-YE04grCXVNgBQ= =/base.apk!/lib/x86, /system/lib]]以上是关于在 Xamarin 中膨胀类 android.support.design.widget.Coordinator 时出错的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin Forms Android 错误膨胀类 MaterialCalendarGridView