Xamarin形成了iOS和Android之间的文本布局差异
我正在阅读Charles Petzold的“使用Xamarin.Forms Preview Edition 2创建移动应用程序”,并通过添加背景色来查看元素的各种边界框,在第4章中使用了最后一个代码示例 然而,当我在Android上运行测试应用程序时,我注意到在Android上,在添加到Xamarin形成了iOS和Android之间的文本布局差异,android,ios,xamarin.forms,Android,Ios,Xamarin.forms,我正在阅读Charles Petzold的“使用Xamarin.Forms Preview Edition 2创建移动应用程序”,并通过添加背景色来查看元素的各种边界框,在第4章中使用了最后一个代码示例 然而,当我在Android上运行测试应用程序时,我注意到在Android上,在添加到textStack的每个文本标签上方都添加了一个额外的“框” 但是,一张图片上写着千言万语: 这是我的iOS版本的输出: 这是我的Android版本的输出: 如您所见,在Android版本中,显示的每个文本标签上
textStack
的每个文本标签上方都添加了一个额外的“框”
但是,一张图片上写着千言万语:
这是我的iOS版本的输出:
这是我的Android版本的输出:
如您所见,在Android版本中,显示的每个文本标签上方都有一个“额外”的蓝色框
这是我在第4章中的BlackCatPage
类的代码,虽然有些颜色变化,但与书中的代码几乎相同:
using System;
using System.IO;
using System.Reflection;
using Xamarin.Forms;
namespace BlackCat
{
public class BlackCatPage : ContentPage
{
public BlackCatPage ()
{
StackLayout mainStack = new StackLayout ();
StackLayout textStack = new StackLayout {
Padding = new Thickness (5),
Spacing = 10,
BackgroundColor = Color.Red
};
Assembly assembly = GetType ().GetTypeInfo ().Assembly;
String resource = "BlackCat.Texts.lorem.txt";
using(Stream stream = assembly.GetManifestResourceStream(resource)) {
using(StreamReader reader = new StreamReader(stream)) {
bool gotTitle = false;
string line;
while(null != (line = reader.ReadLine())) {
Label label = new Label {
Text = line,
TextColor = Color.White,
BackgroundColor = Color.Blue
};
if(!gotTitle) {
label.HorizontalOptions = LayoutOptions.Center;
label.FontSize = Device.GetNamedSize(NamedSize.Medium, label);
label.FontAttributes = FontAttributes.Bold;
label.TextColor = Color.Black;
label.BackgroundColor = Color.Yellow;
mainStack.Children.Add(label);
gotTitle = true;
}
else {
textStack.Children.Add(label);
}
}
}
}
ScrollView scrollView = new ScrollView {
Content = textStack,
VerticalOptions = LayoutOptions.FillAndExpand,
Padding = new Thickness(5, 0)
};
mainStack.Children.Add(scrollView);
Content = mainStack;
BackgroundColor = Color.White;
Padding = new Thickness(0, Device.OnPlatform(20, 0, 0), 0, 0);
}
}
}
我想了解为什么在Android上会出现一个额外的蓝色框。我解决了这个问题。空行 我的文本源在段落之间包含一个空行。似乎iOS和Android在渲染方式上略有不同。也就是说,iOS似乎忽略了它们,而Android似乎也包含了它们(还不知道为什么) 无论如何,知道问题的原因,目前插入一个简单的空行检查以避免创建一个空的
标签,似乎可以做到这一点:
while(null != (line = reader.ReadLine())) {
if (line.Trim().Length == 0) {
continue;
}
...
}