2017-10-13 51 views
0

目前,我们在Xamarin NativeUI(共享代码和Xamarin.Android,Xamarin.UWP等)设计的应用程序是在这个过程中决定是否Xamain.Forms足够成熟过渡到。Xamarin形式与原生的Android工具栏

我的一个核心问题是,我们有一个非常自定义的操作栏/工具栏,它利用Android内置的自动移动项目的处理,基于屏幕大小溢出,具有溢出菜单和子菜单,自定义控件代替图标+文本。

我设法得到自定义控件和硬编码溢出项。但我不确定是否有可能没有本地化。如果我们确实需要本地化,我不知道你将如何使用Xamarin.Forms,然后有一个Xamarin.Android ActionBar。

另一个有趣的thinig添加到方程的是,我们必须支持Android 4.3这样就意味着使用支持库动作条。

道歉,问题是有点杂乱的,但可以分为2个细节:可以将项目移动到或从工具栏溢出自动基于在类似的方式到Android可用屏幕大小随着Xamarin.Forms

1)本地工具栏?

2)如果使用Xamarin.Forms,你可以使用Xamarin.Android中定义的工具栏吗?怎么样?

回答

1

这应该可以在Xamarin Forms中使用自定义渲染器。

你已经领先一步,理解你想要做什么以及如何在Xamarin Native中做到这一点。

Here is an overview on custom renderers

Here is a link到Android的一个非常基本的导航页面自定义呈现。您应该能够扩展它以包含您所需的原生Android代码。

要知道,你可能需要重写NavigationPageRenderer如果您使用的应用程序兼容性,以支持早期版本的Android。

+0

谢谢,听起来像它可能能够做我们需要的。 – KrustyGString

1

除了@Steve Chadbourne的回答,知道您在XF项目的PCL中使用的页面控件真的很重要,如果您在客户端Android项目中打开MainActivity.cs文件,您可以在默认情况下找到这样的代码:

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     TabLayoutResource = Resource.Layout.Tabbar; 
     ToolbarResource = Resource.Layout.Toolbar; 

     base.OnCreate(bundle); 

     global::Xamarin.Forms.Forms.Init(this, bundle); 
     LoadApplication(new App()); 
    } 
} 

正如你所看到的,有被定义Toolbar,你可以找到在Resources/layout文件夹中的客户端Android项目:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?attr/colorPrimary" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    android:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

Toolbar在XF的某些页面类型控制中默认使用,例如NavigationPage

对于XF的本地控制,我认为这是可能的,你没注意到Xamarin.Forms.ToolbarItem。它也呈现为Toolbar,您可以将Order属性设置为ToolbarItem以指定要在主要,辅助或默认工具栏表面上显示的项目。

对于自定义渲染器,这是可能的,你可以参考这篇博客:Xamarin Forms - ContentPage with SearchBar in the Navigation bar

不知道哪个是你最好的选择,但我想解释你的两个问题。 XF就像一个UI工具箱,它所有的控件都是基于本地SDK创建的,意味着所有的控件都被渲染为一个匹配的本地控件,因此它可以在本地平台中使用。因此,如果在Android平台上将XF控件呈现为Toolbar,那么行为应该与原生Android中的正常Toolbar相同,如我们自定义渲染器,创建XF控件时,许多属性在其代码中硬编码,这可能会影响结果。如果你遇到这样的问题,我建议阅读Github上的开源文章。

对于你最后一个问题:

如果使用Xamarin.Forms您可以使用Xamarin.Android定义工具栏?怎么样?

您可以使用自定义渲染器或直接修改本机客户端Android项目中的Toolbar.axml中的代码。

+0

非常有用的信息,谢谢。我已经为XF工具栏创建了原型,但它无法执行嵌套列表以及本机Android工具栏可以执行的一些其他操作,因此我很好奇如何恢复为原生的缺失功能。 – KrustyGString

相关问题