如何解决在以Xamarin形式关闭键盘后,Android Webview会创建空白
在xamarin社区中找到了一个帖子,但是没有提及解决方法/答案。 https://forums.xamarin.com/discussion/177332/white-screen-when-closing-android-keyboard
我正在使用Xamarin表格版本:4.5.0.36。 尝试了window.softInput的所有方法。他们都没有工作。关闭键盘后,View会向上推,并且不会调整大小。
我在下面附上我的主要活动
namespace MyApp1.Droid
{
[Activity(Label = “App”1,Icon = "@drawable/Icon",Theme = "@style/MainTheme",ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
private App _app;
TextView msgText;
protected override void OnCreate(Bundle bundle)
{
TabLayoutResource = MyApp1.Droid.Resource.Layout.Tabbar;
ToolbarResource = MyApp1.Droid.Resource.Layout.Toolbar;
base.OnCreate(bundle);
Xamarin.Essentials.Platform.Init(this,bundle);
Current = this;
Window.SetSoftInputMode(SoftInput.AdjustNothing);
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
// Bug in Android 5+,this is an adequate workaround
AndroidBug5497WorkaroundForXamarinAndroid.assistActivity(this,WindowManager);
}
var info = Intent.Extras?.GetString("CommandId","");
global::Xamarin.Forms.Forms.Init(this,bundle);
Xamarin.FormsMaps.Init(this,bundle);
global::Xamarin.Auth.Presenters.XamarinAndroid.AuthenticationConfiguration.Init(this,bundle);
//FormsVideoPlayer.Init(ConfigurationManager.Instance.Config.AndroidVidoPlayerId);
UserDialogs.Init(this);
RegisterDependencyServices();
DependencyService.Get<IAnalyticsService>().AnalyticsInit();
//-----------------------------------------------------------------------------------------------
// Xamarin.Auth initialization
// Presenters Initialization
global::Xamarin.Auth.Presenters.XamarinAndroid.AuthenticationConfiguration.Init(this,bundle);
// Xamarin.Auth CustomTabs Initialization/Customisation
global::Xamarin.Auth.CustomTabsConfiguration.ActionLabel = null;
global::Xamarin.Auth.CustomTabsConfiguration.MenuItemTitle = null;
global::Xamarin.Auth.CustomTabsConfiguration.AreAnimationsUsed = true;
global::Xamarin.Auth.CustomTabsConfiguration.IsShowTitleUsed = false;
global::Xamarin.Auth.CustomTabsConfiguration.IsUrlBarHidingUsed = false;
global::Xamarin.Auth.CustomTabsConfiguration.IsCloseButtonIconUsed = false;
global::Xamarin.Auth.CustomTabsConfiguration.IsActionButtonUsed = false;
global::Xamarin.Auth.CustomTabsConfiguration.IsActionBarToolbarIconUsed = false;
global::Xamarin.Auth.CustomTabsConfiguration.IsDefaultShareMenuItemUsed = false;
global::Android.Graphics.Color color_xamarin_blue;
color_xamarin_blue = new global::Android.Graphics.Color(0x34,0x98,0xdb);
global::Xamarin.Auth.CustomTabsConfiguration.ToolbarColor = color_xamarin_blue;
// ActivityFlags for tweaking closing of CustomTabs
// please report findings!
global::Xamarin.Auth.CustomTabsConfiguration.
ActivityFlags =
global::Android.Content.ActivityFlags.NoHistory
|
global::Android.Content.ActivityFlags.SingleTop
|
global::Android.Content.ActivityFlags.NewTask
;
global::Xamarin.Auth.CustomTabsConfiguration.IsWarmUpUsed = true;
global::Xamarin.Auth.CustomTabsConfiguration.IsPrefetchUsed = true;
DependencyService.Register<ITwilioMessenger,TwilioMessenger>();
this.Window.AddFlags(WindowManagerFlags.Fullscreen);
_app = new App();
if (System.String.IsNullOrEmpty(info))
{
LoadApplication(_app);
AndroidX.AppCompat.Widget.Toolbar toolbar = this.FindViewById<AndroidX.AppCompat.Widget.Toolbar>(Resource.Id.toolbar);
SetSupportActionBar(toolbar);
}
else
{
LoadApplication(new App());
AndroidX.AppCompat.Widget.Toolbar toolbar = this.FindViewById<AndroidX.AppCompat.Widget.Toolbar>(Resource.Id.toolbar);
SetSupportActionBar(toolbar);
}
}
public class AndroidBug5497WorkaroundForXamarinAndroid
{
private readonly Android.Views.View mChildOfContent;
private int usableHeightPrevious;
private FrameLayout.LayoutParams frameLayoutParams;
public static void assistActivity(Activity activity,IWindowManager windowManager)
{
new AndroidBug5497WorkaroundForXamarinAndroid(activity,windowManager);
}
private AndroidBug5497WorkaroundForXamarinAndroid(Activity activity,IWindowManager windowManager)
{
var softButtonsHeight = getSoftbuttonsbarHeight(windowManager);
var content = (FrameLayout)activity.FindViewById(Android.Resource.Id.Content);
mChildOfContent = content.GetChildAt(0);
var vto = mChildOfContent.ViewTreeObserver;
vto.GlobalLayout += (sender,e) => possiblyResizeChildOfContent(softButtonsHeight);
frameLayoutParams = (FrameLayout.LayoutParams)mChildOfContent.LayoutParameters;
}
private void possiblyResizeChildOfContent(int softButtonsHeight)
{
var usableHeightNow = computeUsableHeight();
if (usableHeightNow != usableHeightPrevious)
{
var usableHeightSansKeyboard = mChildOfContent.RootView.Height - softButtonsHeight;
var heightDifference = usableHeightSansKeyboard - usableHeightNow;
if (heightDifference > (usableHeightSansKeyboard / 4))
{
// keyboard probably just became visible
frameLayoutParams.Height = usableHeightSansKeyboard - heightDifference + (softButtonsHeight / 2);
}
else
{
// keyboard probably just became hidden
frameLayoutParams.Height = usableHeightSansKeyboard;
}
mChildOfContent.RequestLayout();
usableHeightPrevious = usableHeightNow;
}
}
private int computeUsableHeight()
{
var r = new Rect();
mChildOfContent.GetWindowVisibleDisplayFrame(r);
return (r.Bottom - r.Top);
}
private int getSoftbuttonsbarHeight(IWindowManager windowManager)
{
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
var metrics = new DisplayMetrics();
windowManager.DefaultDisplay.GetMetrics(metrics);
int usableHeight = metrics.HeightPixels;
windowManager.DefaultDisplay.GetRealMetrics(metrics);
int realHeight = metrics.HeightPixels;
if (realHeight > usableHeight)
return realHeight - usableHeight;
else
return 0;
}
return 0;
}
}
public override void OnRequestPermissionsResult(int requestCode,string[] permissions,Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode,permissions,grantResults);
Plugin.Permissions.PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode,grantResults);
base.OnRequestPermissionsResult(requestCode,grantResults);
}
private void RegisterDependencyServices()
{
DependencyService.Register<IAnalyticsService,AnalyticsService>();
DependencyService.Register<IOrientationHandler,OrientationHandler>();
DependencyService.Register<IPlatformSpecific,PlatformSpecific>();
DependencyService.Register<IAppRating,AppRating>();
DependencyService.Register<IGetThumbnail,GetThumbnail>();
}
protected async override void OnResume()
{
base.OnResume();
}
protected override void OnSaveInstanceState(Bundle outState)
{
//outState.PutInt("click_count",_counter);
Console.Write(GetType().FullName,"Activity A - Saving instance state");
// always call the base implementation!
base.OnSaveInstanceState(outState);
}
// Field,properties,and method for Video Picker
public static MainActivity Current { private set; get; }
public static readonly int PickImageId = 1000;
}
}
Xaml
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:components="clr-namespace:MyApp1.CustomRenders"
x:Class=“MyApp1.Pages.NewChat.ChatPage">
<ContentPage.Content>
<StackLayout Orientation="Vertical" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" Padding="0,0" Spacing="0">
<components:HybridWebView x:Name="webview" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" />
</StackLayout>
</ContentPage.Content>
</ContentPage>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。