Хобрук: Ваш путь к мастерству в программировании

Xamarin.Forms: единицы измерения ограничений в RelativeLayout

Кто-нибудь знает, какой тип единицы "значение" для Constraints.Constant (двойное значение) должно быть?

Я пытаюсь создать свои страницы Xamarin.Forms с помощью RelativeLayouts, но когда я попытался использовать пиксели для значения, элементы стали намного больше, чем они должны быть.

Кроме того, я использую Contraints.RelativeToParent (), но некоторые элементы (особенно изображения) выглядят перекошенными, как если бы «родительский» не занимал весь размер экрана. Есть ли у RelativeLayout предопределенные границы?

(Я использую такие вычисления, как return parent.Width * 0,3906, который должен возвращать 293, но вместо этого возвращает 124,992). Это основано на симуляторе iPhone 6.

Спасибо за любую помощь!

15.06.2015

Ответы:


1

Не существует независимого от платформы способа выполнения вычислений, которых вы пытаетесь достичь. Вам нужно будет создать собственную реализацию для вызова конкретной платформы для размера, который вы можете использовать.

Вам нужно будет следовать шаблону DependencyService:

public interface IDeviceSize
{
    double DeviceHeight { get; }

    double DeviceWidth { get; }
}


public class DeviceSize_Android : IDeviceSize
{
    Context _context;

    public DeviceSize()
    {
        _context = Xamarin.Forms.Forms.Context;
    }

    #region IDeviceSize implementation

    public double DeviceHeight
    {
        get
        {
            return Convert.ToDouble(_context.Resources.DisplayMetrics.HeightPixels / _context.Resources.DisplayMetrics.ScaledDensity);
        }
    }

    public double DeviceWidth
    {
        get
        {

            return Convert.ToDouble(_context.Resources.DisplayMetrics.WidthPixels / _context.Resources.DisplayMetrics.ScaledDensity);
        }
    }

    #endregion
}

public class DeviceSize_iOS : IDeviceSize
{
    public DeviceSize()
    {
    }

    #region IDeviceSize implementation

    public double DeviceHeight
    {
        get
        {
            CGRect screenRect = UIScreen.MainScreen.Bounds;
            return screenRect.Height;
        }
    }

    public double DeviceWidth
    {
        get
        {
            CGRect screenRect = UIScreen.MainScreen.Bounds;
            return screenRect.Width;
        }
    }
    #endregion
}

Вам необходимо опубликовать часть своего кода, чтобы в дальнейшем оценить ваши требования, так как может не быть необходимости указывать определенные размеры, как вы.

16.06.2015
  • Спасибо за ответ! В этом есть смысл. Вот код, который я использую для позиционирования изображения, которое выглядит странно. layout.Children.Add(timeImage, Constraint.RelativeToParent ((parent) => { return parent.Width * 0.52 ; }), Constraint.RelativeToParent ((parent) => { return parent.Height * 0.56 - (parent.Height * 0.0727) / 2.0; }), Constraint.RelativeToParent ((parent) => { return parent.Width * 0.3906; }), Constraint.RelativeToParent ((parent) => { return parent.Height * 0.0727; })); 17.06.2015
  • Почему вы пытаетесь раскладывать элементы так конкретно? Если вы загрузите снимок экрана с тем, что пытаетесь создать, я увижу, есть ли более простой способ. 17.06.2015
  • По-видимому, мне нужен более высокий рейтинг (10), прежде чем я смогу публиковать какие-либо изображения. Дай мне посмотреть, что я могу с этим поделать. 17.06.2015
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..