Xamarin形式与原生的Android工具栏
目前,我们在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中定义的工具栏吗?怎么样?
这应该可以在Xamarin Forms中使用自定义渲染器。
你已经领先一步,理解你想要做什么以及如何在Xamarin Native中做到这一点。
Here is an overview on custom renderers。
Here is a link到Android的一个非常基本的导航页面自定义呈现。您应该能够扩展它以包含您所需的原生Android代码。
要知道,你可能需要重写NavigationPageRenderer如果您使用的应用程序兼容性,以支持早期版本的Android。
除了@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
中的代码。
非常有用的信息,谢谢。我已经为XF工具栏创建了原型,但它无法执行嵌套列表以及本机Android工具栏可以执行的一些其他操作,因此我很好奇如何恢复为原生的缺失功能。 – KrustyGString
谢谢,听起来像它可能能够做我们需要的。 – KrustyGString