退出全屏活动有时会在操作栏和系统导航区域中留下瑕疵

时间:2015-04-08 08:40:36

标签: android android-actionbar android-appcompat android-fullscreen visual-artifacts

我有一个正常的活动(A),带有可见的动作栏,可以启动另一个全屏活动(B)来显示照片。当(B)完成并且活动(A)显示回有时时,我可以看到以下图片:

Action bar and navigation area artifacts

请注意操作栏和导航区域的视觉扭曲。 只有当我开始与活动交互,滚动它等时,上述工件才会消失。

全屏活动代码:

protected void onCreate(Bundle savedInstanceState) {
    supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

    super.onCreate(savedInstanceState);

    ActionBar supportActionBar = getSupportActionBar();
    supportActionBar.hide();
}
  1. 未使用AndroidManifest.xml中的提示。
  2. 使用支持库(appcompat)
  3. 转载于Nexus 4,Android 5.0.1
  4. 我唯一的样式定制:

     <style name="Theme.MyApp" parent="@style/Theme.AppCompat" tools:ignore="NewApi">
        <!-- Text appearance -->
        <item name="android:textColorLink">@color/linkColor</item>
    </style>
    

    有人知道任何线索,为什么会这样?

2 个答案:

答案 0 :(得分:2)

这是Lollipop Nexus设备的一个错误。作为解决方法,可以在清单活动的声明上禁用硬件加速: android:hardwareAccelerated="false"(这会减慢图形表现)。

答案 1 :(得分:0)

我的申请也是一样的。然而,下面的事情似乎解决了这个问题(在我的列表中):

 @Override
protected void onResume() {
    super.onResume();

    findViewById(R.id.root).setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            findViewById(R.id.root).setLayerType(View.LAYER_TYPE_HARDWARE, null);
        }
    }, 500);
}

正如您所看到的 - 我正在尝试关闭硬件加速,而不是再次打开布局中的主根视图。我并不知道为什么更改视图类型有效,因为这是您在HA Thread上可以找到的内容:

  

注意:您目前无法在视图级别启用硬件加速。除禁用硬件加速外,视图层还具有其他功能。有关其用途的详细信息,请参阅查看图层。