Почему AbsoluteLayout.LayoutBounds работает некорректно в Xamarin? - PullRequest
0 голосов
/ 08 сентября 2018

Я не понимаю, почему так много места до конца экрана (фотография прилагается, платформа - Android). Похоже, AbsoluteLayout заполняет не все пространство экрана, но это не так. Между «белыми» кнопками также есть пробелы (одна кнопка должна занимать 20% экрана; первая запускается через 4% от левого края экрана). второй - после 28%: 28% - 4% -20% = 4% свободного пространства между кнопками) ????

Вот код 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="PokerCalculator.OutsCalculator"
         BackgroundColor="#131313">
<AbsoluteLayout BackgroundColor="HotPink">
    <Label Text="Number of outs:"
           FontSize="Medium"
           AbsoluteLayout.LayoutBounds="0.04,0,0.3,0.18"
           AbsoluteLayout.LayoutFlags="SizeProportional, PositionProportional"  
           BackgroundColor="Aqua"/>
    <Label x:Name="lblOutNumber"
           Text="15"
           AbsoluteLayout.LayoutBounds="0.35,0,0.18,0.18"
           AbsoluteLayout.LayoutFlags="SizeProportional, PositionProportional"
           BackgroundColor="Azure"/>
    <Button x:Name="btnBack"
            Text="BACK"
            Clicked="btnBack_Clicked"
            AbsoluteLayout.LayoutBounds="0.7,0,0.28,0.18"
            AbsoluteLayout.LayoutFlags="SizeProportional, PositionProportional"
            BackgroundColor="Fuchsia"/>

    <Button BackgroundColor="White" 
                AbsoluteLayout.LayoutBounds="0.04,0.2,0.20,0.28"
                AbsoluteLayout.LayoutFlags="All"/>
    <Button BackgroundColor="White"
                AbsoluteLayout.LayoutBounds="0.28,0.2,0.20,0.28"
                AbsoluteLayout.LayoutFlags="All"/>
    <Button BackgroundColor="White"
                AbsoluteLayout.LayoutBounds="0.52,0.2,0.20,0.28"
                AbsoluteLayout.LayoutFlags="All"/>
    <Button BackgroundColor="White"
                AbsoluteLayout.LayoutBounds="0.76,0.2,0.20,0.28"
                AbsoluteLayout.LayoutFlags="All"/>

</AbsoluteLayout>
</ContentPage>

фото

Фото (макет)

Ответы [ 2 ]

0 голосов
/ 30 января 2019

В качестве позднего ответа я поместил пакет nuget с вилкой AbsoluteLayout, но работал более предсказуемым образом.

Установите пакет nuget SmartMachines.AbsoluteLayout, добавьте пространство имен xmlns:sm="clr-namespace:SmartMachines;assembly=AbsoluteLayout", и вы получите точно такой же AbsoluteLayout, что и собственный Xamarin, но с ожидаемым поведением пропорционального выравнивания.

Надеюсь, что это сэкономит другим людям несколько часов на поиск и отладку.

0 голосов
/ 09 сентября 2018

Как обсуждено здесь форум

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

Допустим, вы установили X = 0,5 и Width = 0,5.

С вашим намерением вы могли ожидать, что X элемента начнется с центра и заполнит вторую правую половину границы абсолютного расстояния? номер

Ответ заключается в том, что элемент будет на 50% ширины границы макета и будет находиться прямо в центре. Создание позиции X, такой как (0.5 * absolutelayoutWidth) - (0.5 * elementWidth) (формула примерно такая, я думаю?)

Я предлагаю использовать relativelayout

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...