【问题标题】:How to remove (Android) app title bar in Xamarin.Forms?如何在 Xamarin.Forms 中删除 (Android) 应用程序标题栏?
【发布时间】:2016-10-25 12:00:53
【问题描述】:

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

第一次尝试我尝试将此添加到我的 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);

谁能帮我解决这个问题?

【问题讨论】:

    标签: c# android xaml xamarin.forms


    【解决方案1】:

    这可以在 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() 方法)
    • 您现在编辑了吗?我看不到,只有 10 小时前编辑的。
    • PCL的版本我还没弄明白,不过安卓版的很好用,谢谢!
    【解决方案2】:

    使用最新版Xamarin.Forms我发现如果你使用:

    await Navigation.PushAsync(new NextPage())
    

    //显示下一页的标题

    await Navigation.PushModalAsync(new NextPage())
    

    //下一页的标题不显示

    内森

    【讨论】:

    • 这在我的 NextPage 上运行良好,但是我从哪个页面导航呢?
    • 这是最好的答案,尤其是当您有第一个表单时,它会将您带到带有导航抽屉的下一个表单
    【解决方案3】:

    如果您想删除初始页面上的标题栏,最快和最简单的方法是转到页面的 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】:
      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)
      

      【讨论】:

        【解决方案5】:

        对于 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);
                }                    
            }
        }
        

        【讨论】:

          【解决方案6】:

          我之前遇到过这个问题,我的解决方案是将这行代码添加到 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">
          

          它对我有用!

          【讨论】:

            【解决方案7】:

            试试这个:

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

            【讨论】:

              猜你喜欢
              • 2021-09-02
              • 2015-01-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-04-30
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多