Android webview在xamarin表单中删除键盘后会创建一个空白

Android webview在xamarin表单中删除键盘后会创建一个空白,xamarin,xamarin.forms,xamarin.android,xamarin.ios,android-webview,Xamarin,Xamarin.forms,Xamarin.android,Xamarin.ios,Android Webview,在xamarin社区找到一个帖子,但没有提到解决方法/答案。 我使用的是Xamarin表单版本:4.5.0.36。 尝试了window.softInput的所有方法。他们都没有工作。当键盘关闭时,视图会向上推,并且不会调整大小 我附上我的主要活动如下: namespace MyApp1.Droid { [Activity(Label = “App”1, Icon = "@drawable/Icon", Theme = "@style/MainTheme&q

在xamarin社区找到一个帖子,但没有提到解决方法/答案。

我使用的是Xamarin表单版本:4.5.0.36。 尝试了window.softInput的所有方法。他们都没有工作。当键盘关闭时,视图会向上推,并且不会调整大小

我附上我的主要活动如下:

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, permissions, grantResults);
        base.OnRequestPermissionsResult(requestCode, permissions, 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;
}


}
名称空间MyApp1.Droid
{
[活动(Label=“App”1,Icon=“@drawable/Icon”,Theme=“@style/MainTheme”,
ConfigurationChanges=ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
公共类MainActivity:全局::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
私人应用程序(u App),;
文本视图msgText;
创建时受保护的覆盖无效(捆绑包)
{
TabLayoutResource=MyApp1.Droid.Resource.Layout.Tabbar;
ToolbarResource=MyApp1.Droid.Resource.Layout.Toolbar;
base.OnCreate(bundle);
Xamarin.Essentials.Platform.Init(这个包);
电流=这个;
Window.SetSoftInputMode(软输入。无调整);
如果(Build.VERSION.SdkInt>=BuildVersionCodes.Lollipop)
{
//Android 5+中的Bug,这是一个足够的解决方法
AndroidBug5497 Xamariandroid.assistativity的变通方法(此,WindowManager);
}
var info=Intent.Extras?.GetString(“CommandId”,即“”);
全局::Xamarin.Forms.Forms.Init(这个,bundle);
Xamarin.formsmap.Init(this,bundle);
global::Xamarin.Auth.Presenters.xamariandroid.AuthenticationConfiguration.Init(这个包);
//FormsVideoPlayer.Init(ConfigurationManager.Instance.Config.AndroidVidoPlayerId);
UserDialogs.Init(this);
RegisterDependencyServices();
DependencyService.Get().AnalyticsInit();
//-----------------------------------------------------------------------------------------------
//Xamarin.Auth初始化
//演示者初始化
global::Xamarin.Auth.Presenters.xamariandroid.AuthenticationConfiguration.Init(这个包);
//Xamarin.Auth CustomTabs初始化/自定义
全局::Xamarin.Auth.CustomTabsConfiguration.ActionLabel=null;
全局::Xamarin.Auth.CustomTabsConfiguration.MenuItemTitle=null;
全局::Xamarin.Auth.CustomTabsConfiguration.AreAnimationsUsed=true;
全局::Xamarin.Auth.CustomTabsConfiguration.IsShowTitleUsered=false;
全局::Xamarin.Auth.CustomTabsConfiguration.isurlbaridingused=false;
全局::Xamarin.Auth.CustomTabsConfiguration.isCloseButtonNiconUsed=false;
全局::Xamarin.Auth.CustomTabsConfiguration.IsActionButtonUsed=false;
全局::Xamarin.Auth.CustomTabsConfiguration.IsActionBarToolbarIconUsed=false;
全局::Xamarin.Auth.CustomTabsConfiguration.IsDefaultShareMenuItemUsed=false;
全局::Android.Graphics.Color\u xamarin\u blue;
color_xamarin_blue=new global::Android.Graphics.color(0x34、0x98、0xdb);
全局::Xamarin.Auth.CustomTabsConfiguration.Toolbar color=color\u Xamarin\u blue;
//用于调整自定义选项卡关闭的ActivityFlags
//请报告调查结果!
全局::Xamarin.Auth.CustomTabsConfiguration。
活动标志=
全局::Android.Content.ActivityFlags.NoHistory
|
全局::Android.Content.ActivityFlags.SingleTop
|
全局::Android.Content.ActivityFlags.NewTask
;
全局::Xamarin.Auth.CustomTabsConfiguration.IsWarmUpUsed=true;
全局::Xamarin.Auth.CustomTabsConfiguration.IsPrefetchUsed=true;
DependencyService.Register();
this.Window.AddFlags(WindowManagerFlags.Fullscreen);
_app=新app();
if(System.String.IsNullOrEmpty(info))
{
LoadApplication(_-app);
AndroidX.AppCompat.Widget.Toolbar-Toolbar=this.findviewbyd(Resource.Id.Toolbar);
设置支持操作栏(工具栏);
}
其他的
{
加载应用程序(新应用程序());
AndroidX.AppCompat.Widget.Toolbar-Toolbar=this.findviewbyd(Resource.Id.Toolbar);
设置支持操作栏(工具栏);
}
}
公共类AndroidBug5497 XamarinAndroid的解决方法
{
私有只读Android.Views.View mChildOfContent;
私人使用高度;
私有FrameLayout.LayoutParams frameLayoutParams;
公共静态无效辅助功能(活动活动,iWindows管理器windowManager)
{
新的AndroidBug5497 Xamariandroid(活动,windowManager)解决方案;
}
私有AndroidBug5497 XamarinAndRoid的变通方法(活动活动,iWindows管理器windowManager)
{
var softButtonsHeight=getSoftbuttonsbarHeight(windowManager);
var content=(FrameLayout)activity.findviewbyd(Android.Resource.Id.content);
mChildOfContent=content.GetChildAt(0);
var vto=mChildOfContent.ViewTreeObserver;
vto.GlobalLayout+=(发送方,e)=>可能的ResizeChildOfContent(软按钮显示);
frameLayoutParams=(FrameLayout.LayoutParams)mChildOfContent.LayoutParameters;
}
私有无效可能ResizeChildOfContent(int软按钮大小)
{
var usableHeightNow=computeusableheightnow();
如果(usableHeightNow!=usableHeightPrevious)
{
var usableheightsanskiboard=mChildOfContent.RootView.Height-softButtonsHeight;
var heightDifference=usableHeightSansKeyboard-usableHeightNow;
如果(高度差>(usableHeightSansKeyboard/4))
{
//键盘可能刚刚变得可见
frameLayoutParams.Height=usableHeightSansKeyboard-heightDifference+(软按钮高度/2);
<?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,0,0" Spacing="0">
           <components:HybridWebView x:Name="webview" VerticalOptions="FillAndExpand"  HorizontalOptions="FillAndExpand" />
        </StackLayout>
    </ContentPage.Content>
</ContentPage>