如何在Xamarin.Forms中删除(Android)应用程序标题栏?

时间:2016-06-23 08:55:51

标签: c# android xaml xamarin.forms

我是否有机会在Xamarin.Forms中删除应用程序的标题栏?我正在开发一个Xamarin.Forms Portable项目。我尝试了很多解决方案,但都没有用,我甚至无法启动应用程序。

第一次尝试我尝试将其添加到我的AndroidManifest.xml中,但无效:

android:theme="@android:style/Theme.NoTitleBar"

第二次尝试我尝试在Resources / values中创建一个styles.xml,它是:

<?xml version="1.0" encoding="utf-8" ?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
  <style name="Theme.Default" parent="@android:style/Theme"></style>
  <style name="Theme.NoTitle" parent="@android:style/Theme.NoTitleBar"></style>
  <style name="Theme.FullScreen" parent="@android:style/Theme.NoTitleBar.Fullscreen"></style>
</resources>

然后我将它添加到我的AndroidManifest.xml(也没用)

android:theme="@style/Theme.NoTitle"

第三次尝试我尝试将其添加到MainActivity.cs中的OnCreate方法(无效)。

RequestWindowFeature(WindowFeatures.NoTitle);

任何人都可以帮我吗?

7 个答案:

答案 0 :(得分:4)

如果要删除初始页面上的标题栏,最快捷,最简单的方法是转到XAML中页面的内容页面标题并输入

<强> NavigationPage.HasNavigationBar = “假”

所以XAML会喜欢这样的东西

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="YourClass.YourPage"
             NavigationPage.HasNavigationBar="False">

答案 1 :(得分:3)

这可以在PCL中完成:

 var page = new LoginPage();
 NavigationPage.SetHasNavigationBar(page, false); // call this method every time before you push a page (no title bar)
 await navigation.PushAsync(page); 

如果您使用的是旧的FormsApplicationActivity, 尝试在OnCreate(Bundle bundle)方法中添加它

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle)

    Forms.SetTitleBarVisibility(AndroidTitleBarVisibility.Never);
    Forms.Init(this, bundle);
}

这个似乎在应用程序范围内设置,但我不太确定,因为我不再使用FormsApplicationActivity。

答案 2 :(得分:3)

使用最新版本的Xamarin.Forms我发现如果您使用:

await Navigation.PushAsync(new NextPage())

//显示NextPage上的标题

await Navigation.PushModalAsync(new NextPage())

//未显示NextPage上的标题

答案 3 :(得分:0)

Theme = "@android:style/Theme.NoTitleBar" 

using Android.App;
using Android.OS;
using Android.Webkit;
using Android.Views;  // Webkit required for WebView

namespace LoadWebPage {
    [Activity(Label = "LoadWebPage", MainLauncher = true, Icon = "@drawable/icon", Theme = "@android:style/Theme.NoTitleBar")]
    public class Activity1 : Activity {
        protected override void OnCreate (Bundle bundle)

答案 4 :(得分:0)

对于iOS,这一行(例如在页面的构造函数中)工作得很好。

NavigationPage.SetHasNavigationBar(page, false);

但是,当放入页面的XAML时,Android也会忽略它。

如上所述,Bonelol必须在每次推送页面之前调用此方法。 我使用Prism,因此无法访问页面的创建和推送。 所以我刚刚为NavigationPage创建了一个自定义渲染器并将此行放在那里。也许这会帮助别人。

[assembly: ExportRenderer(typeof(NavigationPage), typeof(CustomNavigationRenderer))]
namespace MyApp.Droid.Renderer
{
    public class CustomNavigationRenderer : NavigationPageRenderer
    {
        public CustomNavigationRenderer(Context context) : base(context)
        {
        }

        protected override Task<bool> OnPushAsync(Page view, bool animated)
        {
            NavigationPage.SetHasNavigationBar(view, false);
            return base.OnPushAsync(view, animated);
        }                    
    }
}

答案 5 :(得分:0)

之前我遇到过这个问题,我的解决方案是将这行代码添加到 MainPage.xaml NavigationPage.HasNavigationBar="False"

<?xml version="1.0" encoding="utf-8" ?>
<xf:BottomBarPage xmlns="http://xamarin.com/schemas/2014/forms"
                  xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                  xmlns:xf="clr-namespace:BottomBar.XamarinForms;assembly=BottomBar.XamarinForms"
                  xmlns:local="clr-namespace:App;assembly=App"
                         NavigationPage.HasNavigationBar="False" <-- This line !-->
                  x:Class="App.MainPage">

它对我有用!

答案 6 :(得分:0)

尝试一下:

 private ActionBar ab;
 protected override void OnCreate(Bundle savedInstanceState)
    {
        try
        {
            base.OnCreate(savedInstanceState);
            ab = this.ActionBar;
            ab.Hide();
        }
         catch (Exception ex)
        {

        }
    }