当前位置: 首页 > 知识库问答 >
问题:

animateLayoutChanges不适合嵌套布局?

薛彭薄
2023-03-14

我有一个嵌套的布局,如下所示:

 <LinearLayout>     <!----Parent layout--->
    <LinearLayout>    <!-----child 1--->
       ...
    </LinearLayout>   <!----child 1 ended--->
    <LinearLayout>    <!-----child 2--->
       ...
    </LinearLayout>   <!----child 2 ended--->
 </LinearLayout>    <!----Parent endded--->

我现在遇到的问题是,由于我所有的数据项都在子1或子2Linearlayout中,如果我添加或删除一个项,子Linearlayout将以animateLayoutChanges的效果设置动画,但父布局将不做任何动画。(对于所有线性布局,我将android:animateLayoutChanges设置为true)。尤其是当我删除子1中的一个项目时,动画效果会变得奇怪(基本上,当子1仍在制作动画时,子2会跳起来)。

有人知道怎么解决这个问题吗?

谢谢

更新

在我发布这个问题后不久,我在Android开发人员的网站LayoutTransition API中发现了这个问题。

由于不同层次布局之间的相互关系,在嵌套视图层次的多个层次上使用LayoutTransition可能不起作用。

那么,有人对这个问题有任何变通建议吗?

共有3个答案

丁绪
2023-03-14

我们在LinearLayout中添加了android:animateLayoutChanges属性,但该更改没有触发动画。要解决此问题,请使用以下代码:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
((ViewGroup) findViewById(R.id.llRoot)).getLayoutTransition()
      .enableTransitionType(LayoutTransition.CHANGING);
}

更多细节。

尉迟韬
2023-03-14

好的,在消化了第一个答案之后,我在这里简单了一下,对于那些在NESTED布局中使用android时没有得到正确动画结果的人:AnimateLayoutChange="true"

>

使用setVisibility()控制目标视图的可见性。

从这里仔细听,将android:animateLayoutChanges=“true”添加到将被调整大小的ViewGroup的外部ViewGroup,该外部ViewGroup必须是包装受动画影响的所有位置更改视图的人。

setVisibility()之前的活动中添加以下代码,这里的rootLinearLayout是我上面提到的外部视图组

 LayoutTransition layoutTransition = rootLinearLayout.getLayoutTransition();
 layoutTransition.enableTransitionType(LayoutTransition.CHANGING);

之前:

之后:

提醒:如果你错过了第三步,你会得到空指针异常。

祝你好运!

伊锦
2023-03-14

animateLayoutChanges属性使用了LayoutTransitions,它可以为布局的子级以及从Android 4.0开始的布局层次结构中一直到树顶部的祖先设置动画。在Honeycomb中,只有布局的子级将被设置动画。有关详细信息,请参阅Android开发者博客。

不幸的是,目前似乎没有简单的方法让版面的同级对其LayoutTransitions做出反应。您可以尝试使用TransitionListener在布局的边界发生更改时获得通知,并使用动画师相应地移动同级视图。请参阅本谷歌帖子中Chet Haase的第二个答案。

编辑-原来有办法。在Android 4.1(API级别16)中,您可以使用默认禁用的布局转换类型CHANGING。要在代码中启用它:

ViewGroup layout = (ViewGroup) findViewById(R.id.yourLayout);
LayoutTransition layoutTransition = layout.getLayoutTransition();
layoutTransition.enableTransitionType(LayoutTransition.CHANGING);

因此,在您的示例中,要为child 2布局设置动画,您需要为其启用更改布局转换。当其父对象的边界发生变化时,将应用转换。

有关更多详细信息,请参阅此DevBytes视频。

 类似资料:
  • 我正在使用以下方法隐藏键盘 它将输入作为“活动”,并在我点击屏幕时隐藏键盘。如果父布局没有嵌套的子布局,则工作正常。但是如果父布局有嵌套的子布局,即使我在点击嵌套的子布局时仍不使用它们。软键盘没有隐藏。 这个问题的解决方案是为嵌套的子布局创建侦听器,然后再次调用上面的方法。但是,有没有其他方法可以隐藏键盘而不设置内部子布局的侦听器。 下面是我使用的布局 在我的活动中我正在做

  • 我无法使elasticsearch聚合+筛选器处理嵌套字段。数据模式(相关部分)如下所示: 本质上,“RB”对象包含一个名为“project”的嵌套字段,该字段包含另外两个字段--“name”和“age”。我正在运行的查询: 该查询应该生成与日期筛选器匹配的前10个项目(project.name字段),按其年龄中值排序,忽略数据库中提及次数少于5次的项目。中位数应仅用于匹配筛选器(日期范围)的项目

  • 六羟甲基三聚氰胺六甲醚。。在某些情况下,我有一个对象需要在hazelcast实例上执行操作。所以我实现了HazelcastInstanceAware接口,但这似乎不适用于嵌套类。。。 以下核心输出"null"到控制台: 公共类NullError实现可序列化,HazelcastInstanceAware{私有瞬态HazelcastInstance instance1;私有瞬态HazelcastIns

  • 我试图通过将请求参数直接绑定到用户实体来简化我的代码,而不是一个字段一个字段地复制值,但是我似乎不能通过这种方式得到验证。 控制器: 验证器: 模型(注意嵌套对象用@Valid标注): 问题是只有密码和重新密码字段被正确验证,用户类中的验证注释被忽略,任何密码匹配的请求都通过,但它应该会出现错误。空密码或不同的密码会按预期出现错误。

  • 如何聚合一个值在嵌套在Elasticsearch嵌套位置?我对一个嵌套对象没有问题,但在嵌套对象内的嵌套我感到困惑... 样本数据: 欲望结果: 在索引映射中,我将cat_a和条目字段的类型设置为嵌套,当我从工具字段查询聚合时,在cat_a的根(级别1)中没有问题,并且可以工作,但是在聚合中在rx_a(这是在第2级)我不能检索结果,它或空或显示错误,因为我的错误查询。 查询级别1 agg: 如何处

  • Elasticsearch排序不适用于嵌套字段。它显示了升序和降序的混合值。比如40,30,50。它不是按升序显示的:30,40,50 查询: