我正在通过Charles Petzold" 使用Xamarin.Forms预览版2创建移动应用程序"我正在玩第4章中的最后一个代码示例,添加背景颜色以查看元素的各种边界框。
但是,当我在Android上运行测试应用时,我注意到在Android上有一个额外的"框"添加到textStack
的每个文本标签上方。
但是,一张照片上写着千言万语:
这是我的iOS版本的输出:http://imgur.com/foJxAQp
这是我的Android版本的输出:http://imgur.com/3gpO4pG
正如您所看到的,在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上会有一个额外的蓝色框呈现。
答案 0 :(得分:1)
我弄明白了这个问题。空行!
我的文字来源包含段落之间的空行。似乎iOS和Android之间在如何呈现它们方面存在细微差别。即,iOS似乎跳过它们,Android似乎包含它们(不知道为什么)。
无论如何,知道是什么导致了这个问题,暂时插入一个简单的空行检查以避免创建一个空的Label
似乎做了这个工作:
while(null != (line = reader.ReadLine())) {
if (line.Trim().Length == 0) {
continue;
}
...
}