【问题标题】:Resizing frame and controls according to device size .Suggestions?根据设备大小调整框架和控件的大小。建议?
【发布时间】:2019-11-22 05:09:05
【问题描述】:

我有一个带有 2 个按钮和标签的框架。 确保内部框架和控件的最佳做法是什么 根据屏幕大小调整大小?

无论我尝试过什么似乎都没有做到! 我认为 flexlayout 可以开箱即用,但无法使其发挥作用。

我使用了绝对布局来调整框架的大小。

任何建议

 <AbsoluteLayout  HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" BackgroundColor="Lavender">
    <Frame Margin="20" 
               AbsoluteLayout.LayoutBounds="0.5,.05,0.9,0.4" AbsoluteLayout.LayoutFlags="All"  
               HorizontalOptions="FillAndExpand" 
               VerticalOptions="FillAndExpand" 
               BackgroundColor="WhiteSmoke" 
               BorderColor="DarkGray" 
               CornerRadius="10">
        <FlexLayout
            Padding="0"
            AlignContent="Center"
            AlignItems="Center"
            Direction="Column"
            JustifyContent="Center"
            Wrap="NoWrap">
            <Label Text="Label1" FontAttributes="Bold"  FlexLayout.AlignSelf="Center" />
            <Grid FlexLayout.AlignSelf="Center" ColumnSpacing="30">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"></RowDefinition>
                    <RowDefinition Height="Auto"></RowDefinition>
                    <RowDefinition Height="Auto"></RowDefinition>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"></ColumnDefinition>
                    <ColumnDefinition Width="Auto"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <Button Grid.Row="0" 
                        Grid.Column="0"
                            Text="A" 
                            MinimumHeightRequest="50" 
                            MinimumWidthRequest="50" 
                            HeightRequest="50" 
                            WidthRequest="50"></Button>
                <Button Grid.Row="0" Grid.Column="1"
                        Text="B" 
                        MinimumHeightRequest="50"
                        MinimumWidthRequest="50" 
                        HeightRequest="50" 
                        WidthRequest="50" />
                <Label Grid.Row="1" Grid.Column="0" Text="Label2" HorizontalTextAlignment="Center"></Label>
                <Label Grid.Row="1" Grid.Column="1" Text="Label3" HorizontalTextAlignment="Center"></Label>
            </Grid>
        </FlexLayout>
    </Frame>
</AbsoluteLayout>

【问题讨论】:

标签: xamarin.forms


【解决方案1】:

您可以通过绑定值转换器根据您的框架更改宽度和高度。

绑定值转换器: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/converters

首先为您的 Frame 设置名称。

    <Frame
 …………
x:Name="frame"/>

创建 MyConverter。 MyConverter.cs

public class MyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (double)value / 3.0;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

设置静态资源。

 <ContentPage.Resources>
    <ResourceDictionary>
        <local:MyConverter x:Key="MyConverter" />
    </ResourceDictionary>
</ContentPage.Resources>

绑定到您的按钮。

  <Button Grid.Row="0" Grid.Column="0" Text="A" 
                        WidthRequest="{Binding Source={x:Reference frame},Path=Width,Converter={StaticResource MyConverter}}"
                        HeightRequest="{Binding Source={x:Reference frame},Path=Height,Converter={StaticResource MyConverter}}"></Button>
                <Button Grid.Row="0" Grid.Column="1" Text="B"  
                        WidthRequest="{Binding Source={x:Reference frame},Path=Width,Converter={StaticResource MyConverter}}"
                        HeightRequest="{Binding Source={x:Reference frame},Path=Height,Converter={StaticResource MyConverter}}"/>

【讨论】:

  • Zang 感谢您的回复。我不得不说我从来没有考虑过为此目的使用转换器。我有一个开放的心态,我通常会在样式中做所有事情,但是你怎么知道要使用哪个尺寸。它似乎不是这样做的方法,一定有更好的办法,大家是怎么做的呢?肯定支持多种设备尺寸一定很常见...
  • 根据您提供的代码,您将按钮的宽度和高度设置为 50。有时,按钮在设备上看起来很小。 Converter根据frame的宽高设置按钮的宽高。它会自动固定框架的宽度和高度,并且不会在设备的框架中执行太小的按钮。
  • 我要做一个小尖峰,看看是否有效,如果有效,我将不胜感激
  • 抱歉延迟确实有效,我不得不承认我没想过以这种方式解决问题,但它有效!我真的认为 flexlayout 会以某种方式解决这个问题,我很想学习如何使用 flex 来解决这个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 2015-06-20
  • 2017-08-12
  • 1970-01-01
相关资源
最近更新 更多