Android工具栏中心使用Xamarin表单中的效果

Ali*_*123 5 c# android android-layout xamarin.forms

我试图以Xamarin形式将Android页面的标题集中在一起.我可以访问工具栏并能够设置字体系列.但我无法将文本对齐或重力设置为居中.

var context = (Android.App.Activity)Forms.Context; var toolbar = context.Resources.GetIdentifier("toolbar", "id", context.PackageName); var view = context.FindViewById(toolbar);

我尝试了以下方法:

ForegroundGravity

view.SetForegroundGravity(GravityFlags.Center);
Run Code Online (Sandbox Code Playgroud)

文字对齐

view.TextAlignment = Android.Views.TextAlignment.Center;
Run Code Online (Sandbox Code Playgroud)

访问工具栏的子项并设置方向和对齐方式.

if (view is ViewGroup)
{
    var g = view as ViewGroup;

    for (var i = 0; i < g.ChildCount; i++)
    {
        SetTypefaceToAllTextViews(g.GetChildAt(i), typeface);
        g.GetChildAt(i).TextAlignment = Android.Views.TextAlignment.Center;
        g.GetChildAt(i).TextDirection = TextDirection.Rtl;

    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,我没有直接访问标题的严重性.


编辑#1:

我在转换视图后添加了这段代码,我可以看到字体正在改变但是由于某种原因它不会被居中或任何其他对齐

if (view is TextView)
{
    var tv = view as TextView;
    tv.Typeface = typeface;
    tv.TextAlignment = Android.Views.TextAlignment.Center;
    tv.Gravity = GravityFlags.CenterHorizontal;
}
Run Code Online (Sandbox Code Playgroud)

编辑#2: 我能够根据下面的答案添加以下效果,它以某种方式将元素集中在一起但不完全在中心.不知怎的,它位于中心的右侧,除非右侧和左侧的工具栏中有2个图标,那么标题将真正居中.在Android 8上测试过.另外,我在类似的解决方案上发现了这个问题.

https://github.com/CrossGeeks/CustomNavigationBarSample/issues/3

gan*_*way 4

我不确定您的效果是如何实现的,但以下自定义渲染器似乎可以工作(与居中文本相关的位位于方法中ToolbarChildAdded):

public class CustomNavigationPageRenderer : NavigationPageRenderer
{
    Android.Support.V7.Widget.Toolbar toolbar;

    public CustomNavigationPageRenderer(Context context) : base(context)
    {
    }

    protected override void OnElementChanged(ElementChangedEventArgs<NavigationPage> e)
    {
        base.OnElementChanged(e);

        if (e.OldElement != null)
        {
            this.toolbar.ChildViewAdded -= ToolbarChildAdded;
        }

        if (e.NewElement != null)
        {
            var toolbarId = Context.Resources.GetIdentifier("toolbar", "id", Context.PackageName);
            this.toolbar = this.FindViewById(toolbarId) as Android.Support.V7.Widget.Toolbar;
            this.toolbar.ChildViewAdded += ToolbarChildAdded;
        }
    }

    private void ToolbarChildAdded(object sender, ChildViewAddedEventArgs e)
    {
        if (e.Child is Android.Support.V7.Widget.AppCompatTextView tv)
        {
            // identify the title text view and center it
            tv.LayoutParameters = new Android.Support.V7.Widget.Toolbar.LayoutParams(LayoutParams.WrapContent, LayoutParams.WrapContent, (int)GravityFlags.CenterHorizontal);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述