将WindowSoftInputMode
设置为Android.Views.SoftInput.AdjustResize
后,Android出现了问题。当键盘显示或隐藏时,我们的启动屏幕会在键盘设置动画的位置上方闪烁。这是很烦人的。
这是其中的一个片段,您可以看到飞溅的东西在后面偷看。
答案 0 :(得分: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
{
}
答案 1 :(得分:0)
可能有点晚了,但是对于熟悉此问题的人来说,这可能是另一种解决方案。我从上面的代码创建了一个启动屏幕,并在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));
}