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

12
有没有可能在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);

有人能帮我吗?

8个回答

6
如果您想在初始页面上删除标题栏,最快、最简单的方法是转到XAML页面中的contentpage标题行,并键入 NavigationPage.HasNavigationBar="False" 因此,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">

4
这可以在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了。


我不确定在哪里插入这段代码。你能告诉我应该放在哪里吗?我的意思是哪个文件和哪个位置(例如:App.cs -> public App()方法)? - Szandi
你现在编辑了吗?我看不到它,只能看到10小时前编辑的那些。 - Szandi
我还没搞清楚PCL版本,但Android版本运行良好,谢谢! - Szandi

3

使用最新版本的Xamarin.Forms时,我发现如果使用以下代码:

await Navigation.PushAsync(new NextPage())

//下一页的标题将会显示

await Navigation.PushModalAsync(new NextPage())

//下一页的标题未显示

Nathan


这在我的NextPage上运行良好,但是我导航的页面呢? - Szandi
这是最好的答案,特别是当您有一个第一个表单,它可以通过导航抽屉将您带到下一个表单时。 - Lutaaya Huzaifah Idris

1
我之前遇到过这个问题,我的解决方案是在 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">

而且对我有效!


0

尝试这个,刚在 flyout 标签中的一个视图 xaml 中发现它 Shell.NavBarIsVisible="False"

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


0

对于iOS来说,这一行代码(例如在页面的构造函数中)完全正常运行。

NavigationPage.SetHasNavigationBar(page, false);

但是Android忽略了它,即使放在页面的XAML中也是如此。

正如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);
        }                    
    }
}

0

试试这个:

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

        }
    }

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接