Android:更新 v.layout 参数后调用 requestLayout() 导致布局恢复到原来的位置

Posted

技术标签:

【中文标题】Android:更新 v.layout 参数后调用 requestLayout() 导致布局恢复到原来的位置【英文标题】:Android: call requestLayout() after update v.layout parameter causes layout reverts back to it's original position 【发布时间】:2013-01-15 00:05:59 【问题描述】:

我有包含两个相对布局的框架布局,一个在另一个之上。当用户单击一个按钮时,顶部的按钮将屏幕向右移动 80%。然后底部的一个变成可点击的。这就是它的样子。

                                 FrameLayout
          RelativeLayout (bottom)              RelativeLayout (top)
            FilterWidgets                   Open/close button, ListView

在 3.0+ 上使用新的动画 api 很容易实现,它是基于属性的动画。对于 3.0 之前的版本,因为动画是基于视图的。所以我最终手动修改了 onAnimationEnd 上的布局属性。调用 requestLayout 使其永久化,但只是为了找出布局恢复到原始位置。有人知道如何永久移动布局吗?

如果您想查看全图,请参阅我的另一篇文章: https://***.com/questions/14541265/changecursor-cause-layout-container-of-the-listview-to-reposition

theTranslationX.addListener(new AnimatorListenerAdapter() 

                    @Override
                    public void onAnimationEnd(Animator nullPointer) 
                        v.clearAnimation();
                        int theL = isMenuOn() ? 0 : v.getLeft() + getFilterWidth();
                        int theR = isMenuOn() ? v.getWidth() : v.getLeft() + getFilterWidth() + v.getWidth();
                        int theHeight = v.getHeight();
                        int theT = 0;
                        v.layout(theL, theT, theR, theHeight);
                        v.requestLayout();
                    
                );

【问题讨论】:

【参考方案1】:

这晚了 9 个月,但请尝试使用:

yourView.layout(left,top,right,bottom); //all parameters are type int

不过我不认为这是永久的,当你调用requestLayout() 时视图的位置仍然会被重置,但请尝试一下。

【讨论】:

以上是关于Android:更新 v.layout 参数后调用 requestLayout() 导致布局恢复到原来的位置的主要内容,如果未能解决你的问题,请参考以下文章

[android] 手机卫士应用程序更新和签名

Android高清巨图加载方案

更新到 xcode 7 后出错:无法使用类型参数列表调用类型“NSRegularExpression”的初始化程序

如果车辆不移动,每 5 分钟更新一次 Android 位置

从 onPause Android 调用删除更新时 GPS 图标不会消失

使用 Air 应用保存图像后更新 android 图片库