无法将类型 'Android.Widget.ScrollView' 的实例转换为类型 'AndroidX.AppCompat.Widget.Toolbar'。赛马林
Unable to convert instance of type 'Android.Widget.ScrollView' to type 'AndroidX.AppCompat.Widget.Toolbar'. Xamarin
当我在 Adnroid 模拟器上 运行 我的应用程序时,我没有遇到问题。
当我尝试 运行 Android Phone 上的应用程序时,我收到错误消息:
System.InvalidCastException
Unable to convert instance of type 'Android.Widget.ScrollView' to type 'AndroidX.AppCompat.Widget.Toolbar'.
调试器在此处停止:
base.OnCreate(savedInstanceState);
这是我在 Android 项目中的 MainActivity.cs 文件:
using System;
using Android.App;
using Android.Content.PM;
using Android.Runtime;
using Android.OS;
namespace SmartCryptoWorld.Droid
{
[Activity(Label = "SmartCryptoWorld", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}
我复制这部分代码:
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
来自另一个项目,我不知道我是否真的需要它。我还用这个文件复制了资源下的文件夹布局。
Toolbar.axml:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
Tabbar.axml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.TabLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:tabIndicatorColor="@android:color/white"
app:tabGravity="fill"
app:tabMode="fixed" />
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="match_parent" android:layout_height="match_parent">
</LinearLayout>
我该怎么做才能修复此错误?
由于您使用的是使用 AndroidX 的最新 Xamarin Forms Activity,因此您需要将遗留库转换为 AndroidX 库。
例如,将 XML 布局中的 替换为 。
并将android.support.design.widget.TabLayout 转换为com.google.android.material.tabs.TabLayout
当我在 Adnroid 模拟器上 运行 我的应用程序时,我没有遇到问题。 当我尝试 运行 Android Phone 上的应用程序时,我收到错误消息:
System.InvalidCastException
Unable to convert instance of type 'Android.Widget.ScrollView' to type 'AndroidX.AppCompat.Widget.Toolbar'.
调试器在此处停止:
base.OnCreate(savedInstanceState);
这是我在 Android 项目中的 MainActivity.cs 文件:
using System;
using Android.App;
using Android.Content.PM;
using Android.Runtime;
using Android.OS;
namespace SmartCryptoWorld.Droid
{
[Activity(Label = "SmartCryptoWorld", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}
我复制这部分代码:
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
来自另一个项目,我不知道我是否真的需要它。我还用这个文件复制了资源下的文件夹布局。
Toolbar.axml:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
Tabbar.axml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.TabLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:tabIndicatorColor="@android:color/white"
app:tabGravity="fill"
app:tabMode="fixed" />
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="match_parent" android:layout_height="match_parent">
</LinearLayout>
我该怎么做才能修复此错误?
由于您使用的是使用 AndroidX 的最新 Xamarin Forms Activity,因此您需要将遗留库转换为 AndroidX 库。
例如,将 XML 布局中的
并将android.support.design.widget.TabLayout 转换为com.google.android.material.tabs.TabLayout