android - LinearLayout 随机闪烁

标签 android android-layout android-linearlayout

如标题所示,我的应用程序中的 LinearLayout 随机闪烁。很难复制,也很难同时获得截图。所以请多多包涵。我只能通过拍照来捕捉它。这是 LinearLayout 的预期行为(注意红色标题下方的白框):

enter image description here

现在这是使用 LinearLayout 的同一页面,其中白色背景消失了:

enter image description here

发生这种情况有两种情况。首先,在页面完全加载之后。其次,在对笑脸执行拖动事件时。

为了修复它,我尝试使用 Android Studio 的代码分析功能来获取有关如何进一步优化此页面的 xml 布局的建议。它给出的建议是:缺少图像上的 contentDescription 属性、支持从右到左布局的对齐选项、在 LinearLayout 上设置 baselineAligned="false" 以获得更好的性能。

我为我的所有 LinearLayouts 添加了 baselineAligned="false" 选项,但没有任何反应。

在以前的帖子中,this是我能得到的最接近的。然而,LinearLayout 的那些 cache 选项似乎没有帮助。您是否认为 LinearLayout 的优化也像 ListView 所描述的那样 here ?最重要的是,我该如何解决这个问题?

编辑:

root.getViewTreeObserver().addOnGlobalLayoutListener(
     new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {    
            mWindowManager.updateViewLayout(mRootView,
                                mLayoutParams);

        }
});

为了提供更多上下文,此应用是使用具有 UI 的服务实现的。屏幕截图中的页面是一项服务。 (请不要问我为什么,我刚加入团队,原来的程序员已经离开了。)

更新:我发现了问题!万岁!因此,当页面加载时,第一个文本框会自动获得焦点。当我在我的文本字段上禁用自动对焦时,问题不再发生。谁能告诉我为什么?

最佳答案

我很确定 mWindowManager.updateViewLayout(mRootView, mLayoutParams); 再次触发 onGlobalLayout() 方法,因为 updateViewLayout 改变了布局,在 onGlobalLayout() 的文档中它说:

Callback method to be invoked when the global layout state or the visibility of views within the view tree changes.

因此请尝试在 mWindowManager.updateViewLayout(mRootView, mLayoutParams); 之前添加 root.getViewTreeObserver().removeGlobalOnLayoutListener(this); 以避免重复调用同一方法。

更新: 它发生在焦点上的原因是因为当 TextView 获得焦点时它会改变背景,有时还会改变大小,所以 onGlobalLayout 被调用。如果您删除监听器,一切都应该没问题。

关于android - LinearLayout 随机闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40240500/

相关文章:

android - 非法参数异常 : Field xxx is a primitive class class xxx but marked as foreign

java - Android - 检查单选按钮已选中

java - 如何使用 JSONObject 解析此响应

c# - Android View 对象复用--防止View重现时显示旧尺寸

android - 色调属性不适用于 float 操作按钮 - 无法更改图标颜色

android - 如何在android中的Relativelayout内底部放置一个Linearlayout

android - 如何在Android Studio中禁用丢失的'@override'注释检查

java - 我可以使用 jdk 7 for android 和 1.6 编译器吗?

Android people 应用程序的详细 View 开发

java - 我的 Android App Java 中的动态透明背景