我在Xamarin Forms中遇到一个奇怪的问题,无法找到解决方案。 我正在尝试使用以下代码制作底部的标签页:
using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;
On<Xamarin.Forms.PlatformConfiguration.Android>().SetToolbarPlacement(ToolbarPlacement.Bottom);
并且我收到导致崩溃的错误:
crc64720bb2db43a66fe9.FragmentContainer.onCreateView
FragmentContainer.java, line 33
Android.Content.Res.Resources+NotFoundException: Resource ID #0x0
堆栈跟踪
JniEnvironment+InstanceMethods.CallNonvirtualVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniObjectReference type, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args)
JniPeerMembers+JniInstanceMethods.FinishCreateInstance (System.String constructorSignature, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters)
Android.Support.Design.Widget.BottomNavigationView..ctor (Android.Content.Context context) [0x0007a] in <2899ffe2b3534c2b9c09eb66776436ae>:0
TabbedPageRenderer.OnElementChanged (Xamarin.Forms.Platform.Android.ElementChangedEventArgs`1[TElement] e) D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\TabbedPageRenderer.cs:286
VisualElementRenderer`1[TElement].SetElement (TElement element) D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:240
IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:133
Platform.CreateRenderer (Xamarin.Forms.VisualElement element, Android.Support.V4.App.FragmentManager fragmentManager, Android.Content.Context context) D:\a\1\s\Xamarin.Forms.Platform.Android\Platform.cs:397
FragmentContainer.OnCreateView (Android.Views.LayoutInflater inflater, Android.Views.ViewGroup container, Android.OS.Bundle savedInstanceState) D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\FragmentContainer.cs:64
Fragment.n_OnCreateView_Landroid_view_LayoutInflater_Landroid_view_ViewGroup_Landroid_os_Bundle_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_inflater, System.IntPtr native_container, System.IntPtr native_savedInstanceState)
(wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.60(intptr,intptr,intptr,intptr,intptr)
android.content.res.Resources$NotFoundException: Resource ID #0x0
android.content.res.ResourcesImpl.getValue ResourcesImpl.java:237
android.content.res.Resources.getColorStateList Resources.java:1052
android.content.Context.getColorStateList Context.java:703
android.support.v7.content.res.AppCompatResources.getColorStateList AppCompatResources.java:67
android.support.design.internal.BottomNavigationMenuView.createDefaultColorStateList BottomNavigationMenuView.java:467
android.support.design.internal.BottomNavigationMenuView.<init> BottomNavigationMenuView.java:101
android.support.design.internal.BottomNavigationMenuView.<init> BottomNavigationMenuView.java:86
android.support.design.widget.BottomNavigationView.<init> BottomNavigationView.java:123
android.support.design.widget.BottomNavigationView.<init> BottomNavigationView.java:114
android.support.design.widget.BottomNavigationView.<init> BottomNavigationView.java:110
crc64720bb2db43a66fe9.FragmentContainer.n_onCreateView(Native Method)
crc64720bb2db43a66fe9.FragmentContainer.onCreateView FragmentContainer.java:33
android.support.v4.app.Fragment.performCreateView Fragment.java:2439
android.support.v4.app.FragmentManagerImpl.moveToState FragmentManager.java:1460
android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState FragmentManager.java:1784
android.support.v4.app.FragmentManagerImpl.moveToState FragmentManager.java:1852
android.support.v4.app.BackStackRecord.executeOps BackStackRecord.java:802
android.support.v4.app.FragmentManagerImpl.executeOps FragmentManager.java:2625
android.support.v4.app.FragmentManagerImpl.executeOpsTogether FragmentManager.java:2411
android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute FragmentManager.java:2366
android.support.v4.app.FragmentManagerImpl.execPendingActions FragmentManager.java:2273
android.support.v4.app.FragmentManagerImpl.executePendingTransactions FragmentManager.java:814
crc64720bb2db43a66fe9.MasterDetailContainer.n_onAttachedToWindow(Native Method)
crc64720bb2db43a66fe9.MasterDetailContainer.onAttachedToWindow MasterDetailContainer.java:62
android.view.View.dispatchAttachedToWindow View.java:19553
android.view.ViewGroup.dispatchAttachedToWindow ViewGroup.java:3430
android.view.ViewGroup.dispatchAttachedToWindow ViewGroup.java:3437
android.view.ViewGroup.addViewInner ViewGroup.java:5149
android.view.ViewGroup.addView ViewGroup.java:4935
android.view.ViewGroup.addView ViewGroup.java:4875
android.view.ViewGroup.addView ViewGroup.java:4848
mono.java.lang.RunnableImplementor.n_run(Native Method)
mono.java.lang.RunnableImplementor.run RunnableImplementor.java:30
android.os.Handler.handleCallback Handler.java:883
android.os.Handler.dispatchMessage Handler.java:100
android.os.Looper.loop Looper.java:214
android.app.ActivityThread.main ActivityThread.java:7356
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run RuntimeInit.java:492
com.android.internal.os.ZygoteInit.main ZygoteInit.java:930
当我移除SetToolbarPlacement(ToolbarPlacement.Bottom)时,它将选项卡式页面置于顶部。
一些库:
<PackageReference Include="Xamarin.Forms" Version="4.6.0.726" />
<PackageReference Include="Xamarin.Android.Support.Design" Version="28.0.0.3" />
<PackageReference Include="Xamarin.Android.Support.v7.AppCompat" Version="28.0.0.3" />
<PackageReference Include="Xamarin.Android.Support.v4" Version="28.0.0.3" />
<PackageReference Include="Xamarin.Android.Support.v7.CardView" Version="28.0.0.3" />
<PackageReference Include="Xamarin.Android.Support.v7.MediaRouter" Version="28.0.0.3" />
<PackageReference Include="Xamarin.Android.Support.Core.Utils" Version="28.0.0.3" />
<PackageReference Include="Xamarin.Android.Support.CustomTabs" Version="28.0.0.3" />
以前有人遇到过此错误吗?
编辑: MainActivity代码:
using System;
using System.Net;
using Rg.Plugins.Popup;
using Acr.UserDialogs;
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Android.Security;
using FreshMvvm;
using Y.Contracts.Services.General;
using Y.Dependencies;
using Y.PageModels;
using Java.Lang;
using Microsoft.AppCenter.Crashes;
using Plugin.Permissions;
using Y.Droid.AndroidDependencies;
using Y.Helpers;
using Xamarin.Forms;
using Exception = Java.Lang.Exception;
using Process = Android.OS.Process;
namespace RPMobile.Droid
{
[Activity(Label = "x", Theme = "@style/MyTheme.Splash", LaunchMode = LaunchMode.SingleTop, MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, ScreenOrientation = ScreenOrientation.Portrait)]
public class MainActivity : Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
static readonly string CHANNEL_ID = "x Notifications";
internal static MainActivity Instance { get; private set; }
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
JavaSystem.LoadLibrary("runtimecore");
base.OnCreate(savedInstanceState);
Instance = this;
Popup.Init(this, savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
UserDialogs.Init(this);
Forms.Init(this, savedInstanceState);
FormsMaterial.Init(this, savedInstanceState);
Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this, savedInstanceState);
ServicePointManager.ServerCertificateValidationCallback += (o, cert, chain, errors) => true;
CreateNotificationChannel();
LoadApplication(new App());
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
{
PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
void CreateNotificationChannel()
{
if (Build.VERSION.SdkInt < BuildVersionCodes.O)
{
// Notification channels are new in API 26 (and not a part of the
// support library). There is no need to create a notification
// channel on older versions of Android.
return;
}
var channelName = "x";
var channelDescription = "Notification Channel for x";
var channel = new NotificationChannel(CHANNEL_ID, channelName, NotificationImportance.Default)
{
Description = channelDescription
};
channel.SetVibrationPattern(new long[] { 0 });
channel.EnableVibration(true);
channel.SetSound(null, null);
var notificationManager = (NotificationManager)GetSystemService(NotificationService);
notificationManager.CreateNotificationChannel(channel);
}
protected override void OnDestroy()
{
if (TempCacheClass.Instance.ArcGisFeatureSessionOnline != null || TempCacheClass.Instance.ArcGisFeatureSessionOffline != null)
{
IGeolocationForegroundService geolocation = new GeolocationService();
geolocation.StopService();
base.OnDestroy();
Process.KillProcess(Process.MyPid());
}
}
}
}
编辑: 添加了TabbedPage xaml
<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="Y.Views.TabbedPage1View"
xmlns:views="clr-namespace:Y.Views;assembly=Y">
<!--Pages can be added as references or inline-->
<views:OfflineMapsListView IconImageSource="OfflineMap.png"/>
<views:DownloadView IconImageSource="Download.png"/>
</TabbedPage>
即使我将标志放在此TabbedPage中也会崩溃
xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
android:TabbedPage.ToolbarPlacement="Bottom"