xamarin.forms - 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 中它不起作用?
解决方案
在 Android 9.0(API 28) 之后,您应该提供更大尺寸的图片资源。
解决方案1:
将相同的图像放入Drawable和xxx-hdpi、xxx-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));
}
推荐阅读
- html - 如何更改默认“请在电子邮件地址中包含@”?
- git - 对网站的小修复应该是 git 的一个特性吗?
- javascript - 使用 Express 的 Nuxt 应用程序不允许在应用程序外部命中 POST 路由
- azure - 返回逻辑应用时 Azure 函数响应为空
- ibm-cloud - IBM Bluemix - 部署时多台服务器重启
- python - 迭代时从字典中删除项目
- ubuntu - Apache 关闭 - 无法获取互斥锁
- java - 无法确定 RetroFit API 接口的正确模型
- php - 重定向标头信息错误
- sql - 如何在 MyBatis XML 文件中动态更改数据库名称?