xamarin 如何在axml中设置只用于tablet的按钮高度?

bvpmtnay  于 2023-02-06  发布在  其他
关注(0)|答案(3)|浏览(116)

如何在axml中设置只用于tablet的按钮高度?

<Button     android:id="@+id/logout_button"
            android:background="@drawable/bordered_button"
            android:textColor="@color/primary"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="10"
            android:textSize="18sp"
            android:layout_marginLeft="0.0dp"
            android:layout_marginTop="0.0dp" />
fcy6dtqo

fcy6dtqo1#

由于您似乎使用的是原生Xamarin.Android,我建议最好的方法是检查原生Android documents是否支持屏幕大小。
这样做时,您将基于您的使用情形获得多种解决方案:

*使用约束布局
*创建替代布局等等

如果您有疑问,请随时与我联系。

c9x0cxw0

c9x0cxw02#

您应该使用OnIdiom XAML元素:

<Button>
  <Button.Height>
    <OnIdiom x:TypeArguments="x:Double" Tablet="[tablet height e.g. 30]" />
  </Button.Height>
</Button>

OnIdiom将允许您为不同的习惯用法设置不同的值。您只需要为要设置的属性创建一个新元素(这里是<Button>元素的Height属性)。由于Height属性的类型为double,因此您需要为TypeArguments设置x:Double

tzdcorbm

tzdcorbm3#

    • 使用设备。习惯用法**

您可能听说过Xamarin.Forms.Device类,该类提供的信息可帮助您在每个平台上自定义布局和功能。它提供的信息可用于了解应用程序是在Windows、iOS还是Android上运行。你可能已经在很多例子中看到了(最常见的用法是在页面顶部添加额外的填充仅在iOS中,以避免状态栏)。在这个类中,还有一个成语枚举,它可以告诉用户有关设备类型的信息,如电话、平板电脑或UWP。有时是桌面应用程序。你可以使用这个类来提供设备类型特定的逻辑。代码如下所示:

if (Xamarin.Forms.Device.Idiom == TargetIdiom.Phone)  
{  
    // apply phone only code  
    mainGrid.Padding = new Thickness(10, 10, 10, 10);  
}  
else if (Xamarin.Forms.Device.Idiom == TargetIdiom.Tablet)  
{  
    // apply tablet only code  
    mainGrid.Padding = new Thickness(100, 10, 100, 10);  
}

这段代码向平板设备的名为"mainGrid"的Grid添加更多的左填充和右填充。

    • 在XAML中使用Device.惯用语**

现在,如果您熟悉XAML,那么您可能会问到一个问题:如何在XAML中设置相同的逻辑?实际上,有一种方法可以完全在XAML中设置此逻辑。

<Grid x:Name="mainGrid">  
   <Grid.Padding>  
     <OnIdiom x:TypeArguments="Thickness" Tablet="100, 10, 100, 10" Phone="10, 10, 10, 10" />  
   </Grid.Padding>  
...  
</Grid>
    • 使用设备。风格习语**

一旦开始在整个应用中应用类似的更改,在XAML或代码中使用Device.Idiom有时会变得重复且效率低下。通过样式,可以重用XAML的任何部分,包括Device.Idiom。例如,假设你想为一个页面创建一个"手机样式"和一个"平板样式",只需要为每种设备大小设置合适的填充,你可以简单地为每种样式定义一个样式,然后在每一个页面上设置。然后,当您要更改任一样式的某个方面时,可以在一个位置进行更改。样式是XAML的一项功能,它允许您将属性设置封装在一个位置,并在整个应用程序中重用它们。您可以创建应用于同一类型的所有控件的隐式样式。或具有唯一键并分配给特定控件的显式样式。样式的作用域是单个页面还是全局,这取决于您定义样式的位置。我不打算更深入地解释样式是如何工作的,所以请查看Xamarin.Forms文档了解更多。让我们看看如何将样式与Device.Idiom一起使用。按照我上面提到的所有页面的phone样式和tablet样式的示例,这里我已经在我的app.xaml文件中使用键定义了我的两个样式(这创建了显式的全局样式)。

<Application.Resources>  
  <ResourceDictionary>  
    <Style x:Key="PhoneGridStyle" TargetType="Grid">  
        <Setter Property="Padding" Value="10, 10, 10, 10" />  
    </Style>  
    <Style x:Key="TabletGridStyle" TargetType="Grid">  
        <Setter Property="Padding" Value="100, 10, 100, 10" />  
    </Style>  
 </ResourceDictionary>  
</Application.Resources>

请注意,我的样式实际上针对的是Grid而不是Page,但我认为您也可以针对Page对象,假设它具有需要修改的所有属性,然后在每个具有Grid的页面上,我希望将其Style设置为全局样式,并可以使用Device.Idiom相应地进行设置。

<Grid>  
   <Grid.Style>  
     <OnIdiom x:TypeArguments="Style" Tablet="{StaticResource TabletGridStyle}" Phone="{StaticResource PhoneGridStyle}" />  
   </Grid.Style>  
...  
</Grid>

参考:Building adaptive applications
在这另一个post中,您可以找到另一种方式来处理不同类型分辨率的应用程序布局。
现在,如果你只能在Android上处理这个,我建议你看看这个Google Android Documentation,你可以为不同的屏幕大小指定不同的风格,并创建单独的布局文件。

相关问题