【发布时间】:2018-07-23 08:21:46
【问题描述】:
我试图在 Xamarin 表单中将 Android 中的页面标题居中。 我可以访问工具栏并且能够设置字体系列。但我无法将文本对齐或重心设置为居中。
var context = (Android.App.Activity)Forms.Context;
var toolbar = context.Resources.GetIdentifier("toolbar", "id", context.PackageName);
var view = context.FindViewById(toolbar);
我尝试了以下方法:
前景重力
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
【问题讨论】:
-
我尝试使用这些样式,但发现使用起来很复杂,并且无法响应我的更改
-
你应该在你的Android项目中找到这个文件
toolbar.axml。只需在您的 XML 中使用TextView作为标题 -
你的意思是我必须添加 TextView 并从 MainActivity 访问它?像这样
-
此解决方案可能有效,但我不想创建新主题,效果将允许我在运行时进行更多控制
-
hum.. 你如何检查 var
g是否为TextView,如果为真则转换它,然后尝试访问gravity字段
标签: c# android android-layout xamarin.forms