首页 > 作文

为Xamarin.Forms的导航栏增加搜索功能

更新时间:2023-04-04 19:48:41 阅读: 评论:0

在使用navigationpage导航的时候, 我们可以给里面添加一些功能按钮, 如下所示:

    <contentpage.toolbaritems>        <toolbaritem/>        <toolbaritem/>    </contentpage.toolbaritems>

但是如果需要给这个控件添加一些其他的控件的时候, 则无法满足我们的需求, 这个时候, 我们就需要使用 页面渲染器(page renderer)。

真机效果演示:

实现思路:经典情话

1.添加用于搜索通知的接口 : iarchpage2.自定义搜索的渲染器 : archpagerender3.添加menu/item xml文件: mainmenu.xml4.添加 nuget:plugin.currentactivity5.给需要添加搜索功能的页面实现 (1)的接口6.为自定义搜索渲染器添加支持该功能的页面7.启动项初始化 : crosscurrentactivity.current.init(this, savedinstancestate)

添加搜索通知接口

    public interface iarchpage    {        void onarchbartextchanged(string text);    }

自定义渲染器

在android项目中创建 customrender文件夹定义 archpagerender

archpagerender代码

     public class archpagerender : pagerenderer    {        public archpagerender(context context) : ba(context)        {        }        protected override void onattachedtowindow()        {            ba.onattachedtowindow();            if (element is iarchpage                && element is page page                && page.parent常德房屋出租 is navigation传承中国传统文化page navigationpage)            {                //workaround to re-add the archview when navigating back to an iarchpage, becau xamarin.forms automatically removes it                navigationpage.popped += handlenavigationpagepopped;                navigationpage.poppedtoroot += handlenavigationpagepopped;            }        }        //adding the archb什么是引渡ar in onsizechanged ensures the archbar is re-added after the device is rotated, becau xamarin.forms automatically removes it        protected override void onsizechanged(int w, int h, int oldw, int oldh)        {            ba.onsizechanged(w, h, oldw, oldh);            if (element is iarchpage && element is page page && page.parent is navigationpage navigationpage && navigationpage.currentpage is iarchpage)            {                addarchtotoolbar(page.title);            }        }        protected override void dispo(bool disposing)        {            if (gettoolbar() is android.support.v7.widget.toolbar toolbar)                toolbar.menu?.removeitem(resource.menu.mainmenu);            ba.dispo(disposing);        }        //workaround to re-add the archview when navigating back to an iarchpage, becau xamarin.forms automatically removes it        void handlenavigationpagepopped(object nder, navigationeventargs e)        {            if (nder is navigationpage navigationpage                && navigationpage.currentpage is iarchpage)            {                addarchtotoolbar(navigationpage.currentpage.title);            }        }        void addarchtotoolbar(string pagetitle)        {            if (gettoolbar() is android.support.v7.widget.toolbar toolbar            && toolbar.menu?.finditem(resource.id.action_arch)?.actionview?.            javacast<android.support.v7.widget.archview>().gettype()            != typeof(android.support.v7.widget.archview))            {                toolbar.title = pagetitle;                toolbar.inflatemenu(resource.menu.mainmenu);                if (toolbar.menu?.finditem(resource.id.action_arch)?.actionview?.                    javacast<android.support.v7.widget.archview>() is                     android.support.v7.widget.archview archview)                {                    archview.querytextchange += ar小年南和小年北是什么意思chview_querytextchange;                    archview.imeoptions = (int)imeaction.arch;                    archview.inputtype = (int)inputtypes.textvariationfilter;                    archview.maxwidth = int.maxvalue;                }            }        }        private void archview_querytextchange(object nder, android.support.v7.widget.archview.querytextchangeeventargs e)        {            if (element is iarchpage archpage)                archpage.onarchbartextchanged(e.newtext);        }        private static android.support.v7.widget.toolbar gettoolbar() => (crosscurrentactivity.current?.activity as mainactivity)?.findviewbyid<android.support.v7.widget.toolbar>(resource.id.toolbar);    }

添加xml文件引用archview

创建mainmenu.xml

在android的resources文件夹中, 创建menu文件夹创建mainmenu.xml文件, 如下:

mainmenu.xml

    <?xml version="1.0" encoding="utf-8" ?><menu xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:app="http://schemas.android.com/apk/res-auto"><item android:id="@+id/action_arch"  android:title="arch"  android:icon="@android:drawable/ic_menu_arch"  app:showasaction="always|collapactionview"  app:actionviewclass="android.support.v7.widget.archview"/></menu>

添加nuget:plugin.currentactivity

在android项目中, 添加nuget包: plugin.currentactivity , 并且在archpagerender 中引用它。

页面实现接口 iarchpage

渲染器添加实现页

如下图所示, 第一个typeof 指向的就是实现搜索内容页的page

mainactivity初始化

在mainactivity的 oncreate 中, 添加初始化的代码, 如下:

以上步骤完整之后, 通过导航页打开的页面即可自带搜索功能。

到此这篇关于为xamarin.forms的导航栏增加搜索功能的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。

本文发布于:2023-04-04 19:48:39,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/a04e72c1527e027e77876f61196f4ceb.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:为Xamarin.Forms的导航栏增加搜索功能.doc

本文 PDF 下载地址:为Xamarin.Forms的导航栏增加搜索功能.pdf

标签:页面   自定义   渲染器   初始化
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图