【问题标题】:Unable to convert instance of type 'Android.Widget.ScrollView' to type 'AndroidX.AppCompat.Widget.Toolbar'. Xamarin无法将“Android.Widget.ScrollView”类型的实例转换为“AndroidX.AppCompat.Widget.Toolbar”类型。赛马林
【发布时间】:2022-01-23 04:36:50
【问题描述】:

当我在 Adnroid Simulator 上运行我的应用程序时,我没有遇到任何问题。 当我尝试在 Android 手机上运行该应用程序时,我收到错误消息:

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,例如将 替换为 。`
  • 你能显示你在哪里使用滚动视图吗?另外,您可以在模拟器和手机之间查看Android版本。我在我的模拟器上运行代码,工具栏没有显示。你真的需要它们吗?

标签: c# android xamarin


【解决方案1】:

由于您使用的是使用 AndroidX 的最新 Xamarin Forms Activity,因此您需要将旧库转换为 AndroidX 库。

例如,在 XML 布局中将 替换为

并将 android.support.design.widget.TabLayout 转换为 com.google.android.material.tabs.TabLayout

【讨论】:

    猜你喜欢
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多