Xamarin.Forms:如何在Renderer的Center of ToolbarItem中添加自定义视图

时间:2018-04-19 06:03:31

标签: android xamarin xamarin.forms

我正在从NavigationPageRenderer for Tool中的ToolbarItem中心添加自定义视图。但它似乎并没有起作用。请参阅下面的代码

public class CustomNavigationPageRenderer : NavigationPageRenderer
{
   public override void OnViewAdded(Android.Views.View child)
    {
        base.OnViewAdded(child);
        var lastPageElement?.Navigation?.NavigationStack?.Last().ToString();

        if (lastPage == "ParentDashboardPage")
        {
            LayoutInflater li = LayoutInflater.From(Context);
            Android.Views.View customView = li.Inflate(Resource.Layout.customActionbar, null);
            var _toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
            _toolbar.RemoveAllViews();
            //_toolbar.AddView(text,new Toolbar.LayoutParams(GravityFlags.Center)); Even this not working
            _toolbar.AddView(customView);
        }
    }
}

下面的customActionbar.axml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <TextView
        android:layout_width="wrap_content"
        android:text=" Dashboard"
        android:textColor="@color/white"
        android:layout_gravity="center"
        android:id="@+id/tvActionBarTitle"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_centerVertical="true"
        android:layout_centerInParent="true"
        android:textSize="17dp" />
    <ImageView
        android:layout_gravity="right"
        android:layout_width="30dp"
        android:layout_height="wrap_content"
        android:id="@+id/item2"
        android:src="@drawable/bell"
        android:layout_alignParentRight="true" />
</RelativeLayout>

输出屏幕如下:

enter image description here

1 个答案:

答案 0 :(得分:0)

如果您使用的是基于Shell的Xamarin.Forms应用程序,则可以使用Shell.TitleView轻松实现此目的,而无需自定义渲染器,定义标题内容,对其进行绑定甚至对其进行样式设置如您所愿。

在您的ContentPage内:

<Shell.TitleView>
    <StackLayout Orientation="Horizontal" Spacing="0">
        <Label Text="Dashboard"
               Opacity="1"
               FontAttributes="Bold"
               FontSize="20"
               TextColor="White"
               HorizontalOptions="CenterAndExpand"
               HorizontalTextAlignment="Center"
               VerticalTextAlignment="Center"/>

        <ImageButton Source="Bell.png"
                     VerticalOptions="CenterAndExpand"
                     HorizontalOptions="End"
                     BackgroundColor="transparent"/>
    </StackLayout>
</Shell.TitleView>

enter image description here

如果您需要根据平台进行某些特殊调整,则可以使用OnPlatform


我为什么选择样式的那些属性?

尽可能接近本机默认文本标题。 相关问题:

Defining Shell.TitleView while preserving the title text of tabs in shell, but seems showing in a different font