物理 phone 上的不同主题行为 (Xamarin)
Different theme behaviour on physical phone (Xamarin)
应用于我的 xamarin android 项目的默认主题在物理 phone 和模拟 phone 上显示不同。
除此之外我没有改变任何风格
android.
的一些覆盖
据我所知,控件已显示并可用,只是颜色错误。
我也通过 APK 发布了应用程序并安装了它。所以没有附加调试器或任何东西,只是简单的安装。虽然结果相同。
模拟:
物理:
这是我的登录视图:
<ContentPage.Resources>
<Style TargetType="{x:Type Label}">
<Setter Property="Margin" Value="4,0,0,0" />
</Style>
</ContentPage.Resources>
<ContentPage.BindingContext>
<vm:LoginViewModel />
</ContentPage.BindingContext>
<ContentPage.Content>
<Grid Padding="20">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackLayout>
<Image Source="teleport_foundation_logo.jpg"
Margin="0, 20, 0, 50" />
</StackLayout>
<StackLayout Grid.Row="1"
VerticalOptions="StartAndExpand">
<Label Text="{Binding UsernameTitle}" />
<Entry Text="{Binding Username}"/>
<Label Text="{Binding PasswordTitle}" />
<Entry IsPassword="True"
Text="{Binding Password}" />
<StackLayout Orientation="Horizontal"
HorizontalOptions="StartAndExpand">
<CheckBox IsChecked="{Binding SaveUsername}" />
<Label Text="Remember username"
VerticalOptions="Center"/>
</StackLayout>
<StackLayout Orientation="Horizontal">
<CheckBox IsChecked="{Binding ShowAdvanced}" />
<Label Text="Advanced options"
VerticalOptions="Center" />
</StackLayout>
<Grid IsVisible="{Binding ShowAdvanced}"
Margin="0, 10, 0, 0">
<StackLayout>
<Label Text="Server Address" />
<Entry Text="{Binding ServerAddress}" />
</StackLayout>
</Grid>
</StackLayout>
<Button VerticalOptions="Center"
Grid.Row="2"
Text="Login" Command="{Binding LoginCommand}"/>
</Grid>
</ContentPage.Content>
我的App.xaml:
<Application.Resources>
<ResourceDictionary>
<Style TargetType="{x:Type Label}">
<Setter Property="Margin" Value="3, 0, 0, 0" />
</Style>
<Color x:Key="Primary">#1976D2</Color>
<Style TargetType="Button">
<Setter Property="TextColor" Value="White"></Setter>
<Setter Property="VisualStateManager.VisualStateGroups">
<VisualStateGroupList>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal">
<VisualState.Setters>
<Setter Property="BackgroundColor" Value="{StaticResource Primary}" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Disabled">
<VisualState.Setters>
<Setter Property="BackgroundColor" Value="#ffe6e6" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</Setter>
</Style>
</ResourceDictionary>
</Application.Resources>
并且 Android (styles.xml) 上的强调色覆盖:
<style name="MainTheme" parent="MainTheme.Base">
<item name="colorAccent">#1976D2</item>
</style>
这是我的第一个真正的 xamarin 项目,欢迎任何意见!
好的,
系统首选主题会覆盖不同的元素,因此为什么在模拟环境(浅色主题)中元素会按预期呈现,而在物理环境中 phone(深色模式)则不会。
因为我想为所有设备使用一种样式,所以相当简单的解决方案是在您的 Android 项目 MainAcitity.cs
中添加以下行:
AppCompatDelegate.DefaultNightMode = AppCompatDelegate.ModeNightNo;
应用于我的 xamarin android 项目的默认主题在物理 phone 和模拟 phone 上显示不同。
除此之外我没有改变任何风格
android.
的一些覆盖
据我所知,控件已显示并可用,只是颜色错误。
我也通过 APK 发布了应用程序并安装了它。所以没有附加调试器或任何东西,只是简单的安装。虽然结果相同。
模拟:
物理:
这是我的登录视图:
<ContentPage.Resources>
<Style TargetType="{x:Type Label}">
<Setter Property="Margin" Value="4,0,0,0" />
</Style>
</ContentPage.Resources>
<ContentPage.BindingContext>
<vm:LoginViewModel />
</ContentPage.BindingContext>
<ContentPage.Content>
<Grid Padding="20">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackLayout>
<Image Source="teleport_foundation_logo.jpg"
Margin="0, 20, 0, 50" />
</StackLayout>
<StackLayout Grid.Row="1"
VerticalOptions="StartAndExpand">
<Label Text="{Binding UsernameTitle}" />
<Entry Text="{Binding Username}"/>
<Label Text="{Binding PasswordTitle}" />
<Entry IsPassword="True"
Text="{Binding Password}" />
<StackLayout Orientation="Horizontal"
HorizontalOptions="StartAndExpand">
<CheckBox IsChecked="{Binding SaveUsername}" />
<Label Text="Remember username"
VerticalOptions="Center"/>
</StackLayout>
<StackLayout Orientation="Horizontal">
<CheckBox IsChecked="{Binding ShowAdvanced}" />
<Label Text="Advanced options"
VerticalOptions="Center" />
</StackLayout>
<Grid IsVisible="{Binding ShowAdvanced}"
Margin="0, 10, 0, 0">
<StackLayout>
<Label Text="Server Address" />
<Entry Text="{Binding ServerAddress}" />
</StackLayout>
</Grid>
</StackLayout>
<Button VerticalOptions="Center"
Grid.Row="2"
Text="Login" Command="{Binding LoginCommand}"/>
</Grid>
</ContentPage.Content>
我的App.xaml:
<Application.Resources>
<ResourceDictionary>
<Style TargetType="{x:Type Label}">
<Setter Property="Margin" Value="3, 0, 0, 0" />
</Style>
<Color x:Key="Primary">#1976D2</Color>
<Style TargetType="Button">
<Setter Property="TextColor" Value="White"></Setter>
<Setter Property="VisualStateManager.VisualStateGroups">
<VisualStateGroupList>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal">
<VisualState.Setters>
<Setter Property="BackgroundColor" Value="{StaticResource Primary}" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Disabled">
<VisualState.Setters>
<Setter Property="BackgroundColor" Value="#ffe6e6" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</Setter>
</Style>
</ResourceDictionary>
</Application.Resources>
并且 Android (styles.xml) 上的强调色覆盖:
<style name="MainTheme" parent="MainTheme.Base">
<item name="colorAccent">#1976D2</item>
</style>
这是我的第一个真正的 xamarin 项目,欢迎任何意见!
好的,
系统首选主题会覆盖不同的元素,因此为什么在模拟环境(浅色主题)中元素会按预期呈现,而在物理环境中 phone(深色模式)则不会。
因为我想为所有设备使用一种样式,所以相当简单的解决方案是在您的 Android 项目 MainAcitity.cs
中添加以下行:
AppCompatDelegate.DefaultNightMode = AppCompatDelegate.ModeNightNo;