首页 文章

Xamarin表格总是得到1px

提问于
浏览
0

正如本文档中指出的那样 - https://developer.xamarin.com/guides/xamarin-forms/creating-mobile-apps-xamarin-forms/summaries/chapter05/,指定高度为1将为您提供1,2或3个像素,具体取决于iOS设备 .

我想在我的视图中添加一个分隔符,类似于HTML中的hr . 我通过添加高度为1的BoxView或StackLayout以及必要的宽度来完成此操作 .

这意味着根据设备的不同,分隔符不会始终以1px呈现 . 有什么我可以做的,以确保我将永远获得任何设备1px?

目前,我所能想到的是将我的内容放入ListView单元格并利用提供的本机分隔符 .

2 回答

  • 0

    我认为你解释错了 . 虽然您实际上可能会得到1,2或3个像素,但用户会看到同样的事情 . 这是由于视网膜屏幕 . 密度会更高,但最终结果会相同 .

    这与您需要为所有图像提供@ 2x和@ 3x后缀的原因相同 . 图像在物理上会更大,但在iOS上它们看起来会相同 .

  • 2

    按照类似的步骤回答https://stackoverflow.com/a/26570933/2931055我最终定义了一个全局样式,它使用在iOS和Android启动时设置的静态变量,然后在我的样式包中定义,以编程方式确定任何给定设备所需的点的分数 .

    在我定义的便携式项目App.xaml.cs中

    public static double ScreenDensity { get; set; }
    

    哪个需要为iOS和Android独立填充 .

    对于iOS,在FinishedLaunching()中的AppDelegate.cs中

    App.ScreenDensity = UIScreen.MainScreen.Scale;
    

    然后对于Android,在OnCreate()中的MainActivity.cs中

    App.ScreenDensity = Resources.DisplayMetrics.Density;
    

    UIScreen.MainScreen.ScaleResources.DisplayMetrics.Density 将评估为1.0,2.0或3.0,具体取决于设备 .

    在我的便携式项目StyleKit(myApp \ Helpers \ StyleKit \ SytyleKit.cs)中,我创建了一个静态变量,以便以后在全局样式中使用

    using Xamarin.Forms;
    
    namespace myApp.Helpers.StyleKit
    {
        public class Sizes
        {
            public static double Hairline = 1 / App.ScreenDensity;
        }
    }
    

    然后在我的全局样式(myApp \ App.xaml)中创建全局样式

    <?xml version="1.0" encoding="utf-8" ?>
    <Application xmlns="http://xamarin.com/schemas/2014/forms"
                 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                 x:Class="myApp.App"
                 xmlns:stylekit="clr-myApp.Helpers.StyleKit;assembly=myApp">
        <Application.Resources>
            <ResourceDictionary>
                <Style x:Key="hairlineSeparator" TargetType="StackLayout">
                    <Setter Property="BackgroundColor" Value="#ddd" />
                    <Setter Property="HeightRequest" Value="{x:Static stylekit:Sizes.Hairline}" />
                    <Setter Property="HorizontalOptions" Value="FillAndExpand" />
                </Style>
            </ResourceDictionary>
        </Application.Resources>
    </Application>
    

    最后当我想在xaml页面中使用一个

    <!-- some content -->
    <StackLayout Style="{StaticResource hairlineSeparator}"></StackLayout>
    <!-- some content -->
    

    在iOS和Android上成功测试过 .

相关问题