物理 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;