键盘向上滚动并在Android上隐藏工具栏和状态栏

Trầ*_*Đạt 0 xamarin.android xamarin xamarin.forms

在显示软键盘时,我想保持状态栏和工具栏在顶部仍然可见。我尝试了许多方法,但无法完成。尝试使用windowSoftInputMode和设置/清除窗口标志,但均失败。有人可以帮我吗? 请点击这里查看gif文件!

小智 5

这是Xamarin错误。看这里

有一些工作区。您必须在MainActivity中执行以下操作:

protected override void OnCreate(Bundle bundle)
{
    ToolbarResource = Resource.Layout.toolbar;
    TabLayoutResource = Resource.Layout.tabs;

    base.OnCreate(bundle);

    //Remove the status bar underlay in API 21+
    if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
    {
        Window.DecorView.SystemUiVisibility = 0;
        var statusBarHeightInfo = typeof(FormsAppCompatActivity).GetField("_statusBarHeight", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
        statusBarHeightInfo.SetValue(this, 0);
        Window.SetStatusBarColor(new Android.Graphics.Color(18, 52, 86, 255));
    }


    global::Xamarin.Forms.Forms.Init(this, bundle);
    LoadApplication(new App());

    App.Current.On<Xamarin.Forms.PlatformConfiguration.Android>().UseWindowSoftInputModeAdjust(WindowSoftInputModeAdjust.Resize);
}
Run Code Online (Sandbox Code Playgroud)

如果使用FormsApplicationActivity而不是FormsAppCompatActivity,则必须删除以下几行:

var statusBarHeightInfo = typeof(FormsAppCompatActivity).GetField("_statusBarHeight", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
statusBarHeightInfo.SetValue(this, 0);
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看Jimmy Garrido的更多详细信息。

但是要隐藏ActionBar,如果在MainActivity中使用以下代码,则仅上述解决方案将不起作用

Xamarin.Forms.Forms.SetTitleBarVisibility(Xamarin.Forms.AndroidTitleBarVisibility.Never);
Run Code Online (Sandbox Code Playgroud)

为了解决该问题,对我有用的是删除上面的这一行并创建一个特定的主题以使ActionBar消失。

在Resources / values / Styles.xml下,我创建了一个新主题(如果已经有一个主题,可以更改主题):

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <style name="MyTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionBarSize">0dp</item>
  </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

并且不要忘记在MainActivity中更改主题,例如:

[Activity(WindowSoftInputMode = SoftInput.AdjustPan, Label = "Test", Icon = "@drawable/icon", Theme = "@style/MyTheme",  MainLauncher = true, NoHistory = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
Run Code Online (Sandbox Code Playgroud)

希望对您有所帮助。