开发日志整理2【android layout用法注意点】

来源:互联网 发布:程序员必备电子产品 编辑:程序博客网 时间:2024/06/16 18:33

记得在开发的时候,想要实现一个动画效果。就是某个控件能够在focus的时候,自身的高度能够向上增长。

实现这个方法有好多种方法。比如采用动态改变控件的高度或者采用layout的方式。

一开始啥也没想,就用了layout方法在属性动画中valueAnimator里面去变化

先看下这个View.layout(int left, int top, int right, int bottom)

它里面的四个参数表示当前需要layout的控件在父控件内左,上,右,下四个点的坐标。

  • 所以第一个需要注意:

        坐标是父控件内部的相对坐标,而不是整个显示窗口的坐标。比如坐标(0, 0)的位置,指的就是父控件的左上方的那个点。


我的目标是动态增长,所以我在valueAnimator里面使用IntEvaluator去实现动态增长。

就是不断的去修改第二个参数从getTop()->0变化。

最终是成功了,但是遇到了个问题。就是有的时候这个已经增长了的控件会突然变回原样。一开始是以为动画执行的有问题。可后来发现并不如此。

  • 第二个注意:

         由于我这个view是个自定义Relativelayout,它里面还有一个textview控件,我的代码是需要通过网络读取一段文字的信息从远程服务器上。并且显示到这个textview上面。

         由于设置文字的时候触发了setText()导致了,子布局onlayout刷新,从而导致这个父控件也跟着刷新。触发了layout的重新计算,恢复到初始的状态。

        所以,有的时候相邻的layout或者子layout发生了变化,比如文字更新,图片刷新,大小变化等等,都会使得某个已经layout的view会重置。

  • 第三个注意:

        就是我这个布局里面的textview是设置成居中的,但是一旦我的自定义父布局由于layout的原因,高度发生了变化。这个原本居中的子布局textview并没有相应的也跟着居中。踌躇中。。。后来才知道layout只是会改变父控件的布局,但是并不会影响子控件的位置。说的再直白点 layout导致骨肉分离。你原本在layout.xml中设置的centerInParent这些完全无用。

         该怎么办呢?

        呵呵。。。。不卖关子了。。直说吧。。。就是采用view.getLayoutParams().heigh来动态修改控件属性从而保证子布局的一致性。记得最后要target.requestLayout.

经验所得,希望对大家能有所帮助,少走弯路。

    

      



0 0
原创粉丝点击