具有全屏和列表视图的 Android 故障打开应用程序
Posted
技术标签:
【中文标题】具有全屏和列表视图的 Android 故障打开应用程序【英文标题】:Android glitch opening app with full screen and list views 【发布时间】:2020-07-27 22:00:03 【问题描述】:我已将我的应用程序和活动配置为在全屏模式下工作,但我发现了一个我无法解决的问题。
当我的应用程序启动时,它会从加载屏幕转到主屏幕,一切正常,但如果我按下“主页”按钮并返回到我的应用程序(现在没有加载屏幕,应用程序已启动),那么布局会被状态栏,我的底栏被剪掉了。此效果持续 0.5-1 秒。
当提示通知出现时也会发生这种情况。
我的研究指向列表视图或类似视图,例如 viewpager。 它只是发生在我的带有列表视图的活动中,然后我更改了我的活动以管理视图寻呼机上的片段,再次尝试,现在发生在每个片段中,我的意思是我的第三页是一个简单的片段,它没有发生在那一个,但现在有了 view pager 就可以了。
我的所有活动都在清单上具有相同的主题:
<activity
android:name=".OpenActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.FullScreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
styles.xml
<style name="AppTheme.FullScreen" parent="Theme.AppCompat.Light.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowEnableSplitTouch">false</item>
</style>
main_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:fitsSystemWindows="true">
<RelativeLayout
android:layout_
android:layout_
android:orientation="horizontal"
android:background="@android:color/transparent">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/view_pager"
android:layout_
android:layout_
android:paddingBottom="@dimen/navbar_space" />
<fragment
android:id="@+id/nav_bar_fragment"
android:name="es.udc.psi1516.pickapp.navbar.NavBarFragment"
android:layout_
android:layout_
android:orientation="horizontal"
android:layout_alignParentBottom="true" />
</RelativeLayout>
我的 MainActivity.java 上有一些代码可以隐藏状态栏:
@Override
protected void onResume()
super.onResume();
hideSystemUI();
// This snippet hides the system bars
public void hideSystemUI()
int newUiOptions = getWindow().getDecorView().getSystemUiVisibility();
newUiOptions ^= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
newUiOptions ^= View.SYSTEM_UI_FLAG_FULLSCREEN;
newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
getWindow().getDecorView().setSystemUiVisibility(newUiOptions);
只有当您从 App Icon 进入 App 时才会发生这种情况,如果您从 android 任务视图返回,它会运行良好。我放弃了,但如果你有任何想法,我会尝试任何东西。
【问题讨论】:
【参考方案1】:经过大量测试,我找到了解决方案。
我不得不从 xml 样式中删除 fullscreen 属性,这会应用一些破坏我的应用程序屏幕的内部状态。
现在我必须在代码中管理状态。
删除android:fitsSystemWindows="true"
,这样我的布局就不会为状态栏留下额外空间。
从样式中删除android:windowFullscreen
,现在它看起来像这样:
<style name="AppTheme.FullScreen" parent="Theme.AppCompat.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
更改标志代码以覆盖onResume()
上的当前状态,我正在将标志添加到当前状态,不要问我为什么,可能有些复制粘贴失败:
private void hideSystemUI()
int newUiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
getWindow().getDecorView().setSystemUiVisibility(newUiOptions);
【讨论】:
以上是关于具有全屏和列表视图的 Android 故障打开应用程序的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionViewController Thumbnail 图像视图全屏和滚动手势
非全屏和全屏 UIViewController 之间的漂亮幻灯片过渡
单击列表视图项目时,Android youtube api可全屏加载视频
MVVM + WPF - 为具有多个视图的 ViewModel 设计