适用于UNO UWP项目的Android初始屏幕

时间:2018-08-28 18:47:24

标签: android xamarin splash-screen uno-platform

我正在尝试为我的UNO解决方案的Android部分实现启动屏幕。我可以启动屏幕出现,等待几秒钟,但是导航到主页后,在app.cs中出现以下异常

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
#if DEBUG
    if (System.Diagnostics.Debugger.IsAttached)
    {
       // this.DebugSettings.EnableFrameRateCounter = true;
    }
 #endif
    Frame rootFrame = Windows.UI.Xaml.Window.Current.Content as Frame;

    // Do not repeat app initialization when the Window already has content,
    // just ensure that the window is active
    if (rootFrame == null)
    {
      // Create a Frame to act as the navigation context and navigate to the first page
           rootFrame = new Frame(); <<<<< exception

未处理的异常: Java.Lang.NullPointerException:尝试在空对象引用上调用虚拟方法'android.content.res.Resources android.content.Context.getResources()'

堆栈跟踪非常简单:

  

Uno1.App.On中的0x25在C:\ Users \ pjsta \ Documents \ Visual Studio 2017 \ Projects \ Uno1 \ Uno1 \ Uno1.Shared \ App.xaml.cs:55,17 C#中启动

解决方案的相关部分是 1.我在Android项目中的新SplashActivity

 [Activity(Label = "SplashScreen", MainLauncher = true, Theme = "@style/Theme.SplashActivity")]

   public class SplashActivity : Activity
   {
        protected override void OnCreate(Bundle savedInstanceState)
        {
             base.OnCreate(savedInstanceState); 
             System.Threading.Thread.Sleep(1000);
             StartActivity(typeof(MainActivity));
        }
    }
  1. 对MainActivity的修改不是MainLauncher

    [活动( MainLauncher = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize, WindowSoftInputMode = SoftInput.AdjustPan | SoftInput.StateHidden)]

    公共类MainActivity:Windows.UI.Xaml.ApplicationActivity { }

相关样式将加载到初始屏幕中,然后单击确定。将MainActivity切换回MainLauncher = true可以,尽管没有启动屏幕。 我是Xamarin和Android开发的新手,但是胜任UWP。外面有人有什么主意吗?

1 个答案:

答案 0 :(得分:1)

从异常来看,听起来像是在调用new Frame()时,使用空Context调用了基本的本机构造函数。这可能是因为Uno期望ApplicationActivity作为MainLauncher = true运行。从SplashActivity继承Uno.UI.BaseActivity类可以解决该错误。

在Android上显示初始屏幕的更好方法是修改主题,而不是创建单独的活动。我将Uno Gallery app用作example

  1. 在Android头的Resources / drawable文件夹中创建一个文件,例如splash.xml。在此处定义启动屏幕的视觉外观。

  2. 打开Resources/values/Styles.xml文件。在“ AppTheme”样式内,添加以下行:

    <item name="android:windowBackground">@drawable/splash</item>
    

希望有帮助。另外,请将有关Uno Platform的问题标记为“ uno-platform”(“ uno”标记是指OpenOffice组件模型)。