【问题标题】:NavigationPage rendere for android. Xamarin Forms用于 android 的 NavigationPage 渲染器。 Xamarin 表单
【发布时间】:2017-11-29 01:33:09
【问题描述】:

我正在尝试从自定义渲染器访问操作栏(我知道我可以使用 toolbar.xml,但它不适合我的情况)。 这是我的代码

[assembly: ExportRenderer(typeof(NavigationPage), typeof(NoviNavigationPageRenderer))]
namespace NoviMobileTest.Droid.Renderers
{
    public class NoviNavigationPageRenderer : PageRenderer
    {

        protected override void OnLayout(bool changed, int l, int t, int r, int b)
        {
                base.OnLayout(changed, l, t, r, b);
                var actionBar = ((Activity)Context).ActionBar;
                actionBar.SetBackgroundDrawable(Resources.GetDrawable(Resource.Drawable.YourImageInDrawable));
        }
    }
}

变量actionbar 始终为空。我也尝试过扩展 NavigationRenderer,但我得到了类转换异常。我见过很多人有同样的问题,但令人惊讶的是没有例子可以看到。我想如何获得工具栏的实例?

注意: 我的 MainActivity 扩展了FormsAppCompatActivity

提前致谢

【问题讨论】:

  • 在您声明 actionBar 的行中,您使用 Xamarin.Forms.Forms.Context 的“上下文”?
  • 不,它是 Android.Content.Context。我也尝试过 Forms 但仍然返回 null
  • 那是你的问题。该上下文不是您应用中的实际活动,因此它没有操作栏。您需要像 Wilson Vargas 在他的回答中那样使用您应用的当前活动。

标签: c# xamarin.forms custom-renderer


【解决方案1】:

尝试在你的 Android 项目中安装CurrentActivity Plugin,然后像这样:

using Plugin.CurrentActivity;
...
private static Android.Support.V7.Widget.Toolbar GetToolbar() => (CrossCurrentActivity.Current?.Activity as MainActivity)?.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);

最后:

protected override void OnLayout(bool changed, int l, int t, int r, int b)
    {
            base.OnLayout(changed, l, t, r, b);
            var actionBar = GetToolbar();
            actionBar.SetBackgroundDrawable(Resources.GetDrawable(Resource.Drawable.YourImageInDrawable));
    }

有关此的更多信息,请参阅:IconNavigationPageRenderer.cs

【讨论】:

  • 感谢您的建议,但不幸的是它仍然返回 null
  • 您的建议是正确的,实际上它返回了正确的上下文。问题是我正在渲染一个NavigationPage,而它在被调用时没有操作栏。
  • 包括 if (actionBar != null) { actionBar.SetBackgroundDrawable... }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 2022-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多