【问题标题】:display master page over navigation bar in xamarin forms droid project在 xamarin 表单 droid 项目中的导航栏上显示母版页
【发布时间】:2016-08-31 03:38:10
【问题描述】:

对于那些曾经用 Java for Android 编写代码的人,我相信你会立即理解这个概念,而其他人可能不会,但没关系,我会尽力解释我的意思。

我有这个项目,公司一,在工作中交付,我必须开发一个应用程序,其中包含导航抽屉概念表单材料设计,但适应公司的 adm 最喜欢的“概念”开发,即 Xamarin(在这种情况下是 Forms)...使用 Xamarin,嗯,几乎是一样的东西,但它可以实现所需的管理,但是在 Forms 中?...。好吧,让我们说他们还没有了解其背后的概念(很可能是儿童游戏应用程序)并需要一个非常专业的 B2C 应用程序,使用 THAT 开发... -_-

无论如何,在我设法找到并不得不面对的大量其他问题中,是这样的:导航抽屉(这里也称为母版页)需要显示在 AppCompatBar(这里是导航栏)上,因为,好吧,因为这就是使用 Android 应该有的感觉,这就是它与其他所有应用程序的工作方式,这就是它的设计方式,以及它必须如何工作,但你猜怎么着?不能进入 Xamarin 表单...

我已经尝试了https://developer.xamarin.com/guides/xamarin-forms/user-interface/navigation/master-detail-page/,网络上的几个博客和论坛(当然,除了他们的,因为我在 3 个月后仍在等待一个非常简单的答案,并且该项目必须很快以演示的形式呈现),他们的书《创造 带有 Xamarin.Forms 的移动应用程序”,Charles Petzold 的在线视频,什么都没有,不知道如何在调用时在导航栏上显示母版页......

这是 xaml 中主页的代码:

<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
              xmlns:local="clr-namespace:Mobile.UI.Pages;assembly=Mobile"
              x:Class="Mobile.UI.Pages.MainPage"
              BackgroundColor="White"
              IsGestureEnabled="False"
              MasterBehavior="Default">

<MasterDetailPage.Master>
    <local:MasterPage x:Name="masterPage" />
</MasterDetailPage.Master>

<MasterDetailPage.Detail>
    <NavigationPage
        BarBackgroundColor="#27C6E5">
        <x:Arguments>
            <local:ItemListPage />
        </x:Arguments>
    </NavigationPage>
</MasterDetailPage.Detail>

母版页也在 xaml 中:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="Mobile.UI.Pages.MasterPage"
         Icon="menu.png"
         Title="Menu">

<ContentPage.Padding>
    <OnPlatform x:TypeArguments="Thickness"
                iOS="0, 20, 0, 0" />
</ContentPage.Padding>

<StackLayout
    VerticalOptions="FillAndExpand">

    <StackLayout
        VerticalOptions="Fill"
        HorizontalOptions="Fill"
        HeightRequest="128"
        Orientation="Vertical"
        BackgroundColor="White"
        Padding="4">

        <Image
            Source="favicon.png"
            HeightRequest="128"
            WidthRequest="200"
            VerticalOptions="Center"
            HorizontalOptions="Center" />
    </StackLayout>

    <ListView
        x:Name="menuList"
        VerticalOptions="FillAndExpand"
        SeparatorVisibility="None"
        HasUnevenRows="False">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ImageCell
                    ImageSource="{Binding IconSource}"
                    Text="{Binding Title}" />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</StackLayout>

它的代码隐藏:

public ListView ListView
    {
        get
        {
            return menuList;
        }
    }

    public MasterPage()
    {
        InitializeComponent();

        Padding = 0;

        var menuListItems = new List<MenuListItem>();

        menuListItems.Add(new MenuListItem()
        {
            Title = "Items",
            IconSource = "items.png",
            TargetType = typeof(ItemListPage)
        });

        menuListItems.Add(new MenuListItem()
        {
            Title = "Chat",
            IconSource = "chat.png",
            TargetType = typeof(ChatListPage)
        });

        menuList.ItemsSource = menuListItems;
    }

还有我的主页:

public partial class MainPage : MasterDetailPage
{
    public MainPage()
    {
        InitializeComponent();

        masterPage.ListView.ItemTapped += ListView_ItemTapped;

        if (Device.OS == TargetPlatform.WinPhone)
        {
            Master.Icon = "menu.png";
        }
    }

    private void ListView_ItemTapped(object sender, ItemTappedEventArgs e)
    {
        var item = e.Item as MenuListItem;

        if (item != null)
        {
            Detail = new NavigationPage((Page)Activator.CreateInstance(item.TargetType))
            {
                BarBackgroundColor = Color.FromRgb(204, 204, 204),
                Title = item.Title
            };

            masterPage.ListView.SelectedItem = null;

            IsPresented = false;
        }
    }
}

您可能需要的任何其他内容,请尽管询问...

有什么帮助吗?

提前谢谢...

【问题讨论】:

    标签: android material-design xamarin.forms master-detail navigationbar


    【解决方案1】:

    对我来说,关键是确保 Android 活动继承自 FormsAppCompatActivity。

    This 的博文让我们走上了正轨。

    【讨论】:

    • 是的,我看过这个博客,以及另一个关于图标的更多信息,但这是我不应该搞砸的事情。想象一下,我必须使用与谷歌 Android 背后的概念完全不同的东西,它试图掩盖 Android,甚至没有触及 Android 本身...... -_- 我无法开始理解这是否只是狂热或者缺乏理解诸如限制之类的事情确实存在的能力(特别是关于 windows 世界)......
    • 即便如此,还是非常感谢您的回答。如果您不介意,我将与负责此项目的人分享,以尝试向 Android 用户说明一点,并能够使用更多的原始资源...
    • 还有一件事,您是如何使 formsappcompatactivity 正常工作的?问题是我尝试了您提到的博客文章中的方法,但是我找不到资源工具栏或选项卡来设置 formsappcompatactivity 工具栏资源和选项卡资源属性...
    猜你喜欢
    • 1970-01-01
    • 2018-11-09
    • 2022-06-16
    • 2017-06-10
    • 2017-08-30
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多