2016-06-14 56 views
0

我建立使用Xamarin Android应用Xamarin.FormsApp类是非常简单的,并且包含一个页面像这样:如何在第一页显示之前隐藏导航栏?

public App() 
{ 
    // The root page of your application 
    MainPage = new NavigationPage(new ContentPage() 
    { 
     Title = "My First Page!", 
     Content = new Label() 
     { 
      Text = "Test Page!", 
      TextColor = Color.White, 
      FontSize = 25, 
      HorizontalOptions = LayoutOptions.Center, 
      VerticalOptions = LayoutOptions.Center 
     } 
    }); 
} 

和我MainActivity类,像这样:

[Activity(Label = "GridTest", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] 
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     global::Xamarin.Forms.Forms.Init(this, bundle); 
     LoadApplication(new App()); 
    } 
} 

当我虽然启动应用程序NavigationBar显示为单词“GridTest”显示在左上角,看起来很垃圾,如下所示:

这是我想要隐藏的NavigationBar。

enter image description here

这是我的应用程序加载与导航栏罚款之后。如下图所示:

我想保持这个导航栏

enter image description here

所以我的问题是。如何隐藏显示的Android NavigationBar之前初始页面已加载?

边注:

我已经试过NavigationPage.SetHasNavigationBar(page,false);但这不起作用。这隐藏了NavigationBar的第一页,如下所示。 enter image description here

我想保留!这也不能掩盖“GridTest”导航栏我寻找隐藏(在屏幕截图1所示)

重申一下...我期待隐藏INITIAL导航栏。通过Android的MainActivityXamarin.Forms导航栏提供

+0

加上'Theme.AppCompat.NoActionBar'你主题您的活动。 Xamarin表单应用程序需要一些时间来加载,直到它显示您的主要活动。所以你需要改变你的主要活动。人们为了消除这一点做了些什么,他们添加了一个闪屏来看起来不错。 –

+0

@AkashAmin你有一个如何将主题添加到我的'MainActivity'的例子吗? – user1

+0

在下面发布我的答案。 @ user1 –

回答

2

主要活动将加载第一应用程序启动的时间。

[Activity(Label = "testapp", MainLauncher = true, Theme = "@style/MyTheme", ScreenOrientation = ScreenOrientation.Portrait)] 
    public class SplashActivity : Activity 
    { 
     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 
      // SetContentView(Resource.Layout.LaunchScreen); //Set a splash screen here if you wish 
      Java.Lang.Runnable runnable = new Java.Lang.Runnable(() => 
      { 
       Intent i = new Intent(this, typeof(MainActivity)); 
       StartActivity(i); 
      }); 

      new Handler().PostDelayed(runnable, 1000); 
     } 
    } 

该活动的主题必须保存到Resources/drawable/styles.xml

<resources> 
    <style name="MyTheme" parent="Theme.AppCompat.NoActionBar"> 
    <item name="android:windowNoTitle">true</item> 
    </style> 
</resources> 

SplashActivity将加载并调用MainActivity

和你MainActivity看起来就像这样:

[Activity(Label = "GridTest", Icon = "@drawable/icon", ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] 
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     global::Xamarin.Forms.Forms.Init(this, bundle); 
     LoadApplication(new App()); 
    } 
} 

你不要需要在这里设置主题,它会像以前一样工作。另一个重要MainActivity是你MUST删除MainLauncher = true

+0

你有没有为'Xamarin.Forms'应用程序工作?我已将代码复制到文件夹“Resources/Values/Styles.xml”,并且必须将'Style'包装在'Resources'标记中,但是当我运行该应用程序时,我在主活动中没有设置对象引用 – user1

+0

是我有这个工作。你使用哪个Android版本..?并没有设置对象引用? –

+0

此代码是否为整个应用程序删除了“ActionBar”?意思是如果我将它设置为我的主题,那么当我的Xamarin.Forms应用程序加载时,我仍然可以使用ActionBar? – user1

0

您应该能够像这样在你的页面设置一个简单的属性来隐藏导航栏: <ContentPage NavigationPage.HasNavigationBar="false" ..... > </ContentPage>

+0

这隐藏了显示的初始页面的'NavigationBar'。我具体说的是在显示此页面之前出现的栏。我想保留第一页的导航栏 – user1

+0

,您可以尝试一下,然后看到它会反抗工作。我已经检查过它,它工作得很好。 –

+0

我试过了,这不起作用。这隐藏了第一页的“NavigationBar”。我想保留的。它不隐藏“GridTest”导航栏。请参阅重复问题 – user1