#uno-platform
#uno-платформа
Вопрос:
Uno говорит, что он «везде идеален для пикселей». Итак, я создал холст шириной 320 и высотой 320 и разместил внутри несколько кнопок, по одной на каждом краю.
Теперь, когда я запускаю приложение на Android или IOS, холст больше экрана, а кнопки с правой стороны вообще не отображаются.
Но у моего iPhone8 и моего Samsung S9 разрешение экрана намного больше, чем просто 320 на 320. Весь холст масштабируется чем-то, и даже границы окна главного окна намного меньше моего разрешения экрана.
Мои вопросы:
- Могу ли я отключить масштабирование и использовать реальное разрешение?
- Есть ли свойство, с помощью которого я могу получить коэффициенты масштабирования, чтобы я мог изменить размер своего холста и просто рассчитать все до масштабированного размера?
Ответ №1:
Значения компоновки, такие как Width
и Height
в Uno / WinUI Xaml, определяются в «логических пикселях», в отличие от «физических пикселей». Поскольку устройства с одинаковыми физическими размерами могут иметь сильно различающуюся физическую плотность пикселей, логические пиксели — лучший способ указать размеры макета в большинстве случаев.
Убедитесь, что вы понимаете систему компоновки Xaml — обычно вам вообще не следует жестко кодировать размеры, когда вы растягиваете содержимое на ширину экрана. Например:
<Grid HorizontalAlignment="Stretch"
Height="320">
<Button Content="Button1"
HorizontalAlignment="Left"
VerticalAlignment="Top" />
<Button Content="Button2"
HorizontalAlignment="Right"
VerticalAlignment="Top" />
...
</Grid>
Все это говорит о том, что в очень редких случаях, когда вам нужно работать с физическими пикселями, зависящими от устройства, вы можете использовать DisplayInformation
класс и его свойства, например:
var displayInformation = DisplayInformation.GetForCurrentView();
var scaleFactor = displayInformation.RawPixelsPerViewPixel;
...
Комментарии:
1. Спасибо, displayInformation помогло. Мое приложение, которое является чем-то вроде браузера для XML-описаний, поставляется из Windows CE, и я реализовал его для Android Mono с помощью RelativeLayout и Xamarin. Формы с AbsoluteLayout. Xamarin. Элементы формы выглядят абсолютно ужасно, поэтому я пришел в UNO. Теперь я могу использовать холст и просто размещать свои элементы. Все размеры и позиции будут рассчитываться приложением в зависимости от пикселей экрана и ориентации. Теперь мне просто нужно знать, почему событие изменения ориентации не срабатывает