首页 > 解决方案 > SoftInput.AdjustResize 导致键盘在显示或隐藏时闪烁

问题描述

WindowSoftInputMode设置为后,我们在 Android 中遇到问题Android.Views.SoftInput.AdjustResize。当键盘显示或隐藏时,我们的启动屏幕会在键盘动画的正上方闪烁。这非常烦人和不和谐。

这是它的一个片段,你可以看到飞溅在后面偷看。

标签: androidxamarinandroid-activityxamarin.formsxamarin.android

解决方案


据我所知,这可能是问题所在。如果您在 Styles.xml 中设置 SplashScreen,如下所示:

<style name="MainTheme.Splash" parent ="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowBackground">@drawable/splashscreen</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
  </style>

而不仅仅是将 LoginActivity(登录屏幕)设置为 MainLaucher,启动屏幕永远不会被释放,它将贯穿您的整个应用程序。想象一下在启动屏幕上有更大的图像并将其拖到整个应用程序中,一段时间后会导致内存泄漏。


如何修复它。创建类似于中间件活动的东西,这将与启动屏幕相同,如下所示

[Activity(Theme = "@style/MainTheme.Splash", MainLauncher = true, NoHistory = true, Icon = "@drawable/appicon")]
    public class SplashActivity : AppCompatActivity
    {

        public override void OnCreate(Bundle savedInstanceState, PersistableBundle persistentState)
        {
            base.OnCreate(savedInstanceState, persistentState);

        }

        // Launches the startup task
        protected override void OnResume()
        {
            base.OnResume();
            Task startupWork = new Task(() => { SimulateStartup(); });
            startupWork.Start();
        }

        // Simulates background work that happens behind the splash screen
        async void SimulateStartup()
        {
            await Task.Delay(500); // Simulate a bit of startup work. You can remove this 
            StartActivity(typeof(LoginActivity)); // Your Activity

        }
    }
}

不仅仅是使用新的 LoginActivity

[Activity(Label = "LoginActivity")]
    public class LoginActivity : AppCompatActivity
    {
    }

推荐阅读