【问题标题】:Exiting fullscreen activity sometimes leaves artifacts in action bar and system navigation areas退出全屏活动有时会在操作栏和系统导航区域留下伪影
【发布时间】:2015-06-13 03:03:42
【问题描述】:

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

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

全屏活动代码:

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 上复制

我拥有的唯一样式自定义:

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

有人知道这是为什么吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    我的应用程序也遇到了同样的问题。但是,以下事情似乎解决了这个问题(在我的列表中):

     @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 上找到:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 2022-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多