2016-05-11 32 views
5

xamarin中的嵌套佈局似乎偏向屏幕左側。我假設這是一個DP像素舍入偏差或什麼?使用填充居中佈局 - 舍入錯誤

任何人都可以確認,有沒有工作或解決方案?

儘管我的示例使用絕對佈局,但問題似乎出現在所有佈局上。

using System; 
using Xamarin.Forms; 

namespace XamarinTest 
{ 
    public partial class Page1 : ContentPage 
    { 
     public Page1() 
     { 
      InitializeComponent(); 
      AbsoluteLayout child = layout; 
      AbsoluteLayout.SetLayoutFlags(child, AbsoluteLayoutFlags.All); 
      AbsoluteLayout.SetLayoutBounds(child, new Rectangle(0, 0, 1, 1)); 
      Random rand = new Random(); 
      for (int i =0;i<100; i++) 
      { 
       child = addLayout(child, rand) ; 
      } 

      AbsoluteLayout abs = new AbsoluteLayout(); 
      AbsoluteLayout.SetLayoutFlags(abs, AbsoluteLayoutFlags.All); 
      AbsoluteLayout.SetLayoutBounds(abs, new Rectangle(0, 0, 0.5, 0.5)); 
      abs.BackgroundColor = Color.Black; 
      layout.Children.Add(abs); 
     } 

     private AbsoluteLayout addLayout(AbsoluteLayout parent, Random rand) 
     { 
      AbsoluteLayout abs = new AbsoluteLayout(); 
      AbsoluteLayout.SetLayoutFlags(abs, AbsoluteLayoutFlags.All); 
      AbsoluteLayout.SetLayoutBounds(abs, new Rectangle(0,0,1,1)); 
      abs.Padding = new Thickness(2.0); 
      abs.BackgroundColor = new Color(rand.NextDouble(), rand.NextDouble(), rand.NextDouble()); 
      parent.Children.Add(abs); 

      return abs; 
     } 
    } 
} 

XAML

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="XamarinTest.Page1"> 
    <AbsoluteLayout BackgroundColor="White" x:Name="layout"> 

    </AbsoluteLayout> 
</ContentPage> 

屏幕截圖(如果它上傳):

layout centering problem

回答

3

我想你看到對一個問題與Forms代碼模擬器呈現差異因爲模擬屏幕的DPI可能會在Android上運行,因此可能會導致偏移。 ​

iPhone模擬器在以1渲染做了偉大的工作:基於實際設備的DPI和1再往下采樣根據您的視圖設置,你的代碼顯示屏將始終呈現那些StackLayout在要求的位置。

如果你看看使用DPI劃分「乾淨」的像素仿真器的物理屏幕上的兩個(OS-X爲主)仿真器上運行的代碼:

enter image description here

enter image description here

對戰一個不:

enter image description here

如果您擁有GenyMotion仿真器的付費版本,則有一個「one-2-one」縮放選項,可提供與iOS仿真器類似的體驗。

道德故事,使用物理設備進行佈局的最終​​檢查。一個好方法是使用Xamarin的測試雲,併爲每個應用程序的表單頁面添加屏幕截圖。

+0

V有趣的,我將不得不檢查。然而,我相信我們首先注意到了物理設備上的問題(儘管它可能是一個不同的原因)你的模擬器使用的屏幕資源是什麼? – Ewan

+0

Ps。完全不同的問題,我們的測試雲ios測試已停止工作,他們似乎無法再接受accesablity id了! (使用風格ID建議代碼from.xamarin網站)你用這個?它對你有用嗎? – Ewan

+0

雙重檢查設備,你絕對正確! – Ewan