【问题标题】:Orientation Change resets Toolbar Xamarin Forms方向更改重置工具栏 Xamarin 表单
【发布时间】:2018-11-27 20:41:22
【问题描述】:

我真正想要实现的是覆盖工具栏的导航按钮。 我参考了this 链接这样做,并且它工作正常,除非应用程序中的任何位置发生方向变化。当方向发生变化时,此行为将被删除。它将工具栏后退按钮重置为其原始行为(返回或导航返回)。

我尝试了另一种方法,将一个按钮添加到工具栏并在运行时访问它,使其在需要时可见并消失。但轮换问题仍然存在。它将按钮状态重置为布局文件中声明的原始状态。

底线:

  1. 我想覆盖工具栏的导航按钮(我已经实现了)
  2. 我希望这种行为在任何方向发生变化的情况下仍然存在(我是 卡在这里)

【问题讨论】:

    标签: android android-layout xamarin xamarin.android xamarin.forms


    【解决方案1】:

    Android 将屏幕方向更改视为configuration change,这需要重新创建正在运行的 Activity。这意味着首先调用OnDestroy(),然后调用OnCreate()

    您的行为本身不会持续,但如果您在 OnCreate() 中进行所需的更改,即使在方向更改后您也将拥有相同的设置。这当然是指您在运行时添加按钮的第二次尝试。

    编辑:如果您的 MainActivity 在其上定义了以下属性,则不会调用 OnDestroy 和 OnCreate:

    ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation
    

    如果你删除 ConfigChanges.Orientation,那些 OnDestroy 和 OnCreate 将在屏幕方向改变时被调用。以下是修复后的样子:

    [Activity(Label = "AppSomething", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    

    【讨论】:

    • 我没明白你的意思? MainActivity(xamarin 表单项目的唯一活动)OnCreate 可以将按钮设置为具有此类行为 1 次。我尝试在 MainActivity 的 OnCreate 函数中放置一个调试点并更改了方向,但那里没有任何断点。在 OnConfigurationChanged 的​​覆盖函数中,我得到了断点。如果这是解决此问题的唯一可能方法,那么我将不得不更改我的要求。
    • @Abhinash 我的错,默认情况下 Xamarin.Forms 在 MainActivity 顶部添加一个属性,以阻止那些在方向更改时触发的生命周期事件。查看我的编辑以获取更多信息。
    • 但这不会让整个应用从头开始重启吗?
    • @Abhinash 不,它只是重新初始化了一些东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    相关资源
    最近更新 更多