有自定义导航navarin

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有自定义导航navarin相关的知识,希望对你有一定的参考价值。

我试图在导航栏中有一个搜索栏。我用这段代码做了:

public class NavigationSearchRenderer : PageRenderer
{
    private SearchView _searchView;
    public NavigationSearchRenderer(Context context) : base(context)
    {

    }
    protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
    {
        base.OnElementChanged(e);

        var navPage = Element as NavigationSearchPage;
        if (navPage == null)
            return;

        var activity = this.Context as FormsAppCompatActivity;
        if (activity == null)
            return;

        var toolbar = activity.FindViewById<android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
        _searchView = new SearchView(Context);
        toolbar.AddView(_searchView);
    }

}

它工作但现在所有导航栏都有搜索栏,我只想要从导航搜索页面继承的页面。

我还指出了这样的出口:

[assembly: ExportRenderer(typeof(NavigationSearchPage), typeof(NavigationSearchRenderer))]
答案

它工作但现在所有导航栏都有搜索栏,我只想要从导航搜索页面继承的页面。

您的所有页面都有搜索栏,因为在您导航时,NavigationPage永远不会刷新。由于您的渲染器仅将SearchView添加到工具栏,因此永远不会清除它。您添加的SearchView将始终存在。

解:

  1. 修改此渲染器以渲染项目中的所有页面,您可以使用超类作为ExportRenderer的第一个参数。例如,如果您的所有页面都是ContentPage类型,那么请注册您的渲染器,如下所示: [assembly:ExportRenderer(typeof(ContentPage), typeof(NavigationSearchRenderer))]
  2. OnElementChanged和其他页面清除SearchView时,修改你的NavigationSearchPage以添加SearchViewprotected override void OnElementChanged(ElementChangedEventArgs<Page> e) { base.OnElementChanged(e); var activity = this.Context as FormsAppCompatActivity; if (activity == null) return; if (Element is NavigationSearchPage) { var toolbar = activity.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar); _searchView = new SearchView(Context); toolbar.AddView(_searchView); } else { var page = (Element as ContentPage); if (page == null) { return; } var toolbar = activity.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar); int count = toolbar.ChildCount; for (int i = 0; i < count; i++) { Android.Views.View child =toolbar.GetChildAt(i); if (child is SearchView) { toolbar.RemoveView(child); } } } }

以上是关于有自定义导航navarin的主要内容,如果未能解决你的问题,请参考以下文章

Thingsboard_导航到新仪表板状态_Widget 自定义操作_Javascript 代码

VSCode插件开发全攻略代码片段设置自定义欢迎页

如何阻止片段一直弹出到根片段? [导航组件]

在片段和活动之间导航

ggmap中带有自定义颜色代码的Voronoi镶嵌?

导航抽屉的片段管理