我是否有机会在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);
任何人都可以帮我吗?
答案 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)
{
}
}