首页 > 解决方案 > Xamarin 表单:图像条目在 android 中未按预期工作

问题描述

我关注此博客以在条目中添加图像。它最初在 android 和 IOS 中运行良好。

但是当我将 android 目标版本和目标框架更改为 9.0 时,此功能开始中断。请看下面的截图。

在此处输入图像描述

条目内的图像已放大,未按预期显示。我已经更新了所有的 android SDK,但输出没有变化。我应该做些什么来解决android中的这个问题吗?

我的代码:

 <StackLayout 
          HorizontalOptions="FillAndExpand"
          Padding="5"
          VerticalOptions="CenterAndExpand">

          <Label
              Text="Email"
              TextColor="Black"
              FontSize="Medium"/>

           <Frame 
              CornerRadius="15"
              Padding="2,-3,-3,-3"
              HasShadow="false"
              BorderColor="#c0eefb"
              OutlineColor="#c0eefb">

               <local:ImageEntry
                    Image="ic_email_entry_image_xx"
                    x:Name="username_entry"
                    Text="charlesgeorge.admin"
                    FontSize="Medium"
                    HorizontalOptions="FillAndExpand"
                    Keyboard="Email"/>
           </Frame>

           <Label
               Text="Password"
                Margin="0,5,0,0"
                TextColor="Black"
                FontSize="Medium"/>

                <Frame 
                       CornerRadius="15"
                       Padding="2,-3,-3,-3"
                       HasShadow="false"
                       BorderColor="#c0eefb"
                        OutlineColor="#c0eefb">

                       <local:ImageEntry 
                              Image="ic_password_entry_image_xx"
                               x:Name="password_entry"
                                FontSize="Medium"
                                Text="admingeorge1@"
                                HorizontalOptions="FillAndExpand"
                                 IsPassword="True"/>
                     </Frame>

                      <Button 
                              Text="SIGN IN"
                              Margin="0,15,0,15"
                              HeightRequest="40"
                              WidthRequest="180"
                               FontSize="Large"
                               TextColor="White"
                                HorizontalOptions="CenterAndExpand"
                                BackgroundColor="#26B5D6" 
                                 Clicked="SignInButtonCliked"
                                  BorderRadius="20"/>
                         </Button>
</StackLayout>

如果我将版本从 9.0(pie) 降级到 8.1(oreo),UI 将按预期工作。为什么在 9.0 中它不起作用?

标签: xamarin.forms

解决方案


在 Android 9.0(API 28) 之后,您应该提供更大尺寸的图片资源。

解决方案1:

将相同的图像放入Drawablexxx-hdpixxx-mdpi等。

解决方案2:

您可以在不同版本的 Android 中处理不同的逻辑。

在 ImageEntryRenderer

private BitmapDrawable GetDrawable(string imageEntryImage)
{
   int resID = Resources.GetIdentifier(imageEntryImage, "drawable", this.Context.PackageName);
   var drawable = ContextCompat.GetDrawable(this.Context, resID);
   var bitmap = ((BitmapDrawable)drawable).Bitmap;

   if(Android.OS.Build.VERSION.SdkInt < Android.OS.BuildVersionCodes.P)
   {
     return new BitmapDrawable(Resources, Bitmap.CreateScaledBitmap(bitmap, element.ImageWidth * 2, element.ImageHeight * 2, true));
   }

   return new BitmapDrawable(Resources, Bitmap.CreateScaledBitmap(bitmap, element.ImageWidth , element.ImageHeight , true));
}

推荐阅读