Xamarin在iOS和Android之间形成文本布局差异

时间:2015-11-06 09:19:39

标签: android ios xamarin.forms

我正在通过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上会有一个额外的蓝色框呈现。

1 个答案:

答案 0 :(得分:1)

我弄明白了这个问题。空行!

我的文字来源包含段落之间的空行。似乎iOS和Android之间在如何呈现它们方面存在细微差别。即,iOS似乎跳过它们,Android似乎包含它们(不知道为什么)。

无论如何,知道是什么导致了这个问题,暂时插入一个简单的空行检查以避免创建一个空的Label似乎做了这个工作:

while(null != (line = reader.ReadLine())) {
  if (line.Trim().Length == 0) {
    continue;
  }

  ...
}