我在Xamarin.Forms开发PCL应用程序。
我想为我的主页面设置一个自定义工具栏(带有自定义布局,徽标等)和所有其他页面的标准工具栏(带后退按钮和一些ContentPage.ToolbarItems
)。
我在 layouts 文件夹中创建了自定义文件 MainToolbar.axml 并写了
ToolbarResource = Resource.Layout.MainToolbar;
在 MainActivity.cs 中的OnCreate
事件处理程序中。
现在,我不仅可以在主页面上看到自定义工具栏,还可以在所有页面上看到。我尝试在主页的ToolbarResource = Resource.Layout.Toolbar;
事件处理程序中编写OnDisappearing
,但它并没有影响。那么如何将工具栏更改回标准?我没有为所有页面安装Android渲染器,我认为必须有更好的方法。感谢。
答案 0 :(得分:1)
您无法更改整个工具栏的基本答案,但您可以开发2个布局:main和not main,并以编程方式在单个工具栏窗口小部件中设置其可见性,或者从工具栏中添加/删除它们。我会这样做的。在主页的PCL中
protected override void OnDisappearing()
{
base.OnDisappearing();
MessagingCenter.Send<Page, string>(this, "toolbar", "notmain");
}
protected override void OnAppearing()
{
base.OnAppearing();
MessagingCenter.Send<Page, string>(this, "toolbar", "main");
}
初始化表单后的MainActivity中
protected override void OnCreate(Bundle bundle)
{
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());
var mainToolbarLayout = FindViewById<LinearLayout>(Resource.Id.toolbarMainLayout);
MessagingCenter.Subscribe<Page, string>(this, "toolbar", (page, toolbar) =>
{
if (toolbar == "main")
{
mainToolbarLayout.Visibility = ViewStates.Visible;
}
else
{
mainToolbarLayout.Visibility = ViewStates.Gone;
}
});
}
以下是工具栏的示例
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
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"
app:contentInsetEnd="0dp"
app:contentInsetLeft="0dp"
app:contentInsetRight="0dp"
app:contentInsetStart="0dp"
android:clipToPadding="false"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/toolbarMainLayout"
android:background="@android:color/holo_green_light" />
</android.support.v7.widget.Toolbar>