【问题标题】:SoftInput.AdjustResize causes keyboard to flash when showing or hidingSoftInput.AdjustResize 导致键盘在显示或隐藏时闪烁
【发布时间】:2020-02-20 15:58:50
【问题描述】:

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

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

【问题讨论】:

  • 提供一些代码就好了,也写你想达到的?防止布局移动,使按钮可见...等
  • "...我们的初始屏幕在键盘动画的正上方闪烁。这很烦人且不和谐。" - 我不希望它在上面闪烁蓝色键盘。
  • 哦,它几乎看不到哈哈...好吧,我想我知道问题出在哪里,还有一个问题是您是否将启动画面添加为 android:windowBackground?而不是作为 MainLauncher 有这个 LoginActivity?
  • 是的,没错。
  • 你可以看到答案,我猜

标签: android xamarin android-activity xamarin.forms xamarin.android


【解决方案1】:

据我所知,这可能是问题所在。 如果您在 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
    {
    }

【讨论】:

  • 谢谢,这就是我们最终要做的事情
【解决方案2】:

可能有点晚了,但对于熟悉此问题的人来说,这可能是另一种解决方案。我从上面的代码中创建了一个启动画面,并在 MainActivity OnCreate 方法中设置了 RequestFeature 和 Theme。我还注意到问题可以通过将 android:windowFullscreen 设置为 false 来解决。这是我的代码片段。

创建 Spash 主题

<style name="MyTheme.Splash" parent ="MainTheme.Base">
 <item name="android:windowBackground">@drawable/splash</item>
 <item name="android:windowNoTitle">true</item>  
 <item name="android:windowFullscreen">false</item>  
 <item name="android:windowContentOverlay">@null</item>  
 <item name="android:windowActionBar">true</item>  
 </style>

在 MainAvtivity 上设置主题

  protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;
            base.Window.RequestFeature(WindowFeatures.ActionBar);
            base.SetTheme(Resource.Style.MainTheme);
            base.OnCreate(savedInstanceState);           
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App(path));
        }

【讨论】:

    猜你喜欢
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    相关资源
    最近更新 更多