Xamarin.Forms .193 - AppCompat - 全屏 - 无操作栏

时间:2017-03-06 20:42:31

标签: android xamarin xamarin.forms

当MainActivity从FormsApplicationActivity继承时,获得全屏(无标题栏/状态栏/导航栏)并不是一个大问题。 但是你不能把它作为主题等。

当前的VS解决方案模板让您从const getPostcardLink = () => { console.log('getPostcardLink()...'); let elems = $('.postcard').filter(function () { return $(this).hasClass('active') }); if (elems.length) { const postcard = elems.data('postcard'); console.log(postcard); return postcard } return "error" }; function updatePostcard() { let cLink = getPostcardLink(); let sLink = getStampLink(); if (cLink !== "error") const postcard = `images/_${cLink}.jpg`; if (sLink !== "error") const stamp = `images/_${sLink}.jpg`; if (postcard && stamp) console.log(`${postcard} with ${stamp}`); } 继承主题。但随后状态栏又回来了。 只是不应该花几天时间来查看过时的操作页面和试验和错误的山峰,并对这些不同的技巧进行无数次排列'只是为了获得一个完整的应用程序。我已经点击了每一个谷歌搜索,每个堆栈溢出,这里的其他问题以及曾经在2011年工作过的示例等等。但我现在无法在现代VS解决方案中找到或弄清楚如何使其工作。

也许我只是尝试了很多不同的方式我已经迷失了或者有多种不同的方式相互冲突,但是任何人都可以告诉我如何基本的#34;欢迎来到Xamarin&#34 ;一种应用程序如何让它全屏?我已经如此接近,但并不完全在那里。我能做的最好的事情就是在状态栏中没有内容,但栏本身仍然存在。我可以'相信一些像普通的地方一样想要一个全屏应用程序正在踢我的屁股,但它确实如此。

摆脱导航栏

FormsAppCompatActivity

MainActivity.cs

public partial class App : Application { public App() { InitializeComponent(); NavigationPage.SetHasNavigationBar(this, false); MainPage = new NavigationPage(new RpxOne.MainPage()); } 属性中设置主题 设置Windows标志 (显然有很多种努力和排列可以让它发挥作用)

Activity

然后是主题本身

[Activity(Label = "RpxOne",
          Icon = "@drawable/icon",
          Theme = "@style/FullScreen",
          MainLauncher = true,
          ConfigurationChanges = ConfigChanges.ScreenSize |
                                 ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    WindowManagerFlags _originalFlags;
    protected override void OnCreate(Bundle bundle)
    {
        SupportRequestWindowFeature((int)WindowFeatures.NoTitle);
        //RequestWindowFeature(WindowFeatures.NoTitle);
        //TabLayoutResource = Resource.Layout.Tabbar;
        //ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(bundle);

        //if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
        //{
        //    // Kill status bar underlay added by FormsAppCompatActivity
        //    // Must be done before calling FormsAppCompatActivity.OnCreate

        //    this.Window.DecorView.SystemUiVisibility = StatusBarVisibility.Hidden;
        //    ActionBar?.Hide();
        //}
        //else
        //{
        //    this.Window.SetFlags(WindowManagerFlags.Fullscreen, WindowManagerFlags.Fullscreen);
        //    SupportActionBar?.Hide();
        //}

        //global::Xamarin.Forms.Forms.SetTitleBarVisibility(Xamarin.Forms.AndroidTitleBarVisibility.Never);
        //Window.ClearFlags(WindowManagerFlags.ForceNotFullscreen);
        //Window.ClearFlags(WindowManagerFlags.Fullscreen);
        //Window.AddFlags(WindowManagerFlags.Fullscreen |
        //                WindowManagerFlags.TurnScreenOn |
        //                WindowManagerFlags.KeepScreenOn);

        this.Window.ClearFlags(WindowManagerFlags.Fullscreen);
        this.Window.AddFlags(WindowManagerFlags.Fullscreen); // hide the status bar
        global::Xamarin.Forms.Forms.Init(this, bundle);
        LoadApplication(new App());

    }

Xamarin论坛上的原帖 https://forums.xamarin.com/discussion/90145/how-to-get-a-full-screen-app-in-todays-xf-193-appcompat-environment-it-shouldnt-be-this-hard 没有回复 - 我无法相信这是一个谜。

1 个答案:

答案 0 :(得分:1)

隐藏标题栏和操作栏的代码实际上有效,您看到的操作栏是由Xamarin.Forms视图渲染器创建的视图。通过检查DDMS的Hierarchy Viewer,您可以看到以下视图:

enter image description here

由于我们无法修改xamarin表单的源代码,因此这里有一个解决此问题的解决方法。创建一个这样的样式:

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.Light">
  <item name="windowNoTitle">true</item>
  <item name="windowActionBar">false</item>
  <item name="android:windowFullscreen">true</item>

  <!--colorPrimaryDark is used for the status bar-->
  <item name="colorPrimaryDark">#fff9f9f9</item>
</style>

MainActivity

[Activity(Label = "FormsIssue6", Icon = "@drawable/icon", Theme = "@style/Theme.AppCompat.Light.NoActionBar.FullScreen", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        TabLayoutResource = Resource.Layout.Tabbar;
        //ToolbarResource = Resource.Layout.Toolbar;
        //RequestWindowFeature(WindowFeatures.NoTitle);
        //Window.AddFlags(WindowManagerFlags.Fullscreen | WindowManagerFlags.TurnScreenOn);

        base.OnCreate(bundle);

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

这只是一种解决方法,那里的操作栏视图仍然会占用布局中的空间。

我使用颜色#fff9f9f9的原因,我只查看souce code<drawable name="input_method_fullscreen_background">项目似乎在我身边,我没有找到来源Xamarin.Forms的代码,你可以尝试一下。