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) и заполняет весь экран.

Ваш вызов-переводчик должен выглядеть так:

XAM

  <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 при создании 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