我试图以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);
文字对齐
view.TextAlignment = Android.Views.TextAlignment.Center;
访问工具栏的子项并设置方向和对齐方式.
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;
}
}
问题是,我没有直接访问标题的严重性.
编辑#1:
我在转换视图后添加了这段代码,我可以看到字体正在改变但是由于某种原因它不会被居中或任何其他对齐
if (view is TextView)
{
var tv = view as TextView;
tv.Typeface = typeface;
tv.TextAlignment = Android.Views.TextAlignment.Center;
tv.Gravity = GravityFlags.CenterHorizontal;
}
编辑#2:
我能够根据下面的答案将以下内容添加到效果中,它以某种方式将元素集中在一起但不完全位于中心.不知怎的,它位于中心的右侧,除非右侧和左侧的工具栏中有2个图标,那么标题将真正居中.在Android 8上测试过.另外,我在类似的解决方案上发现了这个问题.
https://github.com/CrossGeeks/CustomNavigationBarSample/issues/3
最佳答案
我不确定你的效果是如何实现的,但是下面的自定义渲染器似乎可以工作(与居中文本相关的位在ToolbarChildAdded方法中):
public class CustomNavigationPageRenderer : NavigationPageRenderer
{
Android.Support.V7.Widget.Toolbar toolbar;
public CustomNavigationPageRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs