天天看點

Android 動态移動控件實作

在一些界面上,我們可能需要實作可以移動的按鈕等功能,最簡單的方式是調用View.layout(),任何布局上的空間都可以支援這種方式移動,上下左右參數值是相對于父viewgroup而言的。

1

2

3

<code>public</code> <code>void</code> <code>layout(</code><code>int</code> <code>l, </code><code>int</code> <code>t, </code><code>int</code> <code>r, </code><code>int</code> <code>b)</code>

<code>eg.</code>

<code>button.layout(newLeft, newTop, newRight,newBottom);</code>

但是這種方式有個缺陷就是,當同一個viewgroup中有控件更新(界面重新整理)時,移動的控件會複位,即回到一開始的位置,這常常會讓人莫名其妙。

另外一種方法是調用MarginLayoutParams.setMargins(),重新設定控件位置參數來實作控件移動效果。這種方式比較适合RelativeLayout、FrameLayout,AbsoluteLayout,對于LinearLayout,因為最後增加的控件總在最下或最右,是以達不到移動效果,TableLayout也不行。

4

5

<code>public</code> <code>MarginLayoutParams(MarginLayoutParams source)</code>

<code>FrameLayout.LayoutParams btnLp = (FrameLayout.LayoutParams)button.getLayoutParams();</code>

<code>btnLp.setMargins(newLeft, newTop, newRight, newBottom);   </code>

<code>button.requestLayout();</code>

Android不建議應用直接調用layout()方法,是以個人建議選擇FrameLayout + setMargins()實作控件動态移動效果,還有一個經常搭配使用的方法是bringToFront(),當控件被蓋住看不見時相當有用。

     本文轉自sarchitect 51CTO部落格,原文連結:http://blog.51cto.com/stevex/1266926,如需轉載請自行聯系原作者

繼續閱讀