Xamarin Forms - XAML оформление извън екрана

Опитвам се да направя следното:

въведете описание на изображението тук

Червената зона е AbsoluteLayout, която искам да преместя извън екрана, както е показано. В момента използвам {Layout}.TranslateTo();, но той използва абсолютна позиция, така че не знам дали ще работи за всяко устройство, както е на снимката..

Трудно е да се обясни, но само си представете, че премествам това оформление на 300px (x), след което на телефона работи, защото екранът не е толкова голям, но на таблет вероятно няма да работи, защото екранът е по-голям.

Освен това, ако се направи завъртане (хоризонтален мод), екранът ще бъде по-голям от всички други възможности и т.н.

И така, съществува ли нещо, като пропорционалните стойности на AbsoluteLayout като 2.0 или -1.0, за да поставите оформление извън екрана, но адаптирано за всяко устройство?

Ако разбирате напълно какво имам предвид, не се колебайте да ме попитате за повече информация по някоя точка :)

Благодаря предварително !


person Emixam23    schedule 17.08.2016    source източник


Отговори (2)


AbsoluteLayout приема пропорционален размер между 0 и 1. Така че можете да зададете като:

AbsoluteLayout.LayoutBounds="0,0,1,1"
AbsoluteLayout.LayoutFlags="SizeProportional" 

което означава, че започва от (0,0) точка и запълва целия екран.

Вашето обаждане за превод трябва да бъде като:

Xaml

  <AbsoluteLayout x:Name="yourRedOne" AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="SizeProportional">
    <!--Your red container content goes here-->

  </AbsoluteLayout>

</AbsolutLayout>

Xaml.cs

yourRedOne.TranslateTo(Width, 0);

за вашите промени в ориентацията трябва също така да замените метода OnSizeAllocated в обиколката View и да извикате метода TranslateTo отново.

person eakgul    schedule 18.08.2016
comment
Благодаря за отговора :) - person Emixam23; 18.08.2016

Като се има предвид, че сте в проект за формуляри, бих прочел височината и ширината на екрана, когато приложението се стартира, и бих го съхранил в глобална променлива. Нещо като това.

Android onCreate на MainActivity

       //Get Screen Size of Phone for Android
        var metrics = Resources.DisplayMetrics;
        var widthInDp = ConvertPixelsToDp(metrics.WidthPixels);
        var heightInDp = ConvertPixelsToDp(metrics.HeightPixels);
        Global.CurrentScreen.screenWidth = widthInDp;
        Global.CurrentScreen.screenHeight = heightInDp;

    private int ConvertPixelsToDp(float pixelValue)
    {
        var dp = (int)((pixelValue) / Resources.DisplayMetrics.Density);
        return dp;
    }

За iOS в AppDelegate завърши стартирането

Global.CurrentScreen.screenHeight = (int)UIScreen.MainScreen.Bounds.Height;
Global.CurrentScreen.screenWidth = (int)UIScreen.MainScreen.Bounds.Width;

И след това преведете според запазения размер.

person nishantvodoo    schedule 17.08.2016