除了@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,您可以在客户端Android项目的Resources/layout文件夹中找到它:
<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 创建的,这意味着所有控件都被渲染为匹配的原生控件,因此可以在原生平台上使用。因此,如果 XF 控件在 Android 平台中呈现为 Toolbar,则行为应该与原生 Android 中的普通 Toolbar 相同,但是就像我们自定义渲染器一样,当创建 XF 控件时, 许多属性在其代码中被硬编码,这可能会影响这里的结果。如果你遇到这样的问题,我建议阅读 Github 上的开源。
最后一个问题:
如果使用 Xamarin.Forms,是否可以使用 Xamarin.Android 中定义的工具栏?怎么样?
您可以使用自定义渲染器,也可以在原生客户端 Android 项目中直接修改 Toolbar.axml 中的代码。