Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin形成了iOS和Android之间的文本布局差异_Android_Ios_Xamarin.forms - Fatal编程技术网

Xamarin形成了iOS和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版本中,显示的每个文本标签上

我正在阅读Charles Petzold的“使用Xamarin.Forms Preview Edition 2创建移动应用程序”,并通过添加背景色来查看元素的各种边界框,在第4章中使用了最后一个代码示例

然而,当我在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;
  }

  ...
}