如何通過代碼更改視圖的位置?像改變它的X,Y位置一樣。可能嗎?如何在Android中動態設置視圖的位置?
回答
對於Honeycomb(API Level 11)以下的任何內容,您必須使用setLayoutParams(...)
。
如果你可以限制你的支持蜂窩最多可以使用setX(...)
,setY(...)
,setLeft(...)
,setTop(...)
等
設置此視圖相對於其父的左側位置:
view.setLeft(int leftPosition);
設置此視圖相對於其父的正確位置:
view.setRight(int rightPosition);
設置此觀點相對的頂部位置到其父:
view.setTop(int topPosition);
設置此視圖的底部位置相對於其父母nt:
view.setBottom(int bottomPositon);
上述方法用於設置視圖與其父項相關的位置。
如果您使用的是HoneyComb Sdk(API Level 11),則可以嘗試使用以下方法。
參數x是該視圖的視覺x位置。
view.setY(float y);
參數y是該視圖的視覺y位置。
我希望這對你有幫助。 :)
我正在2.2 Froyo上工作,這些方法不適用於它。 – AB1209
使用RelativeLayout
,將您的視圖置於其中,從您的視圖中獲取RelativeLayout.LayoutParams
對象,並根據需要設置邊距。然後在您的視圖上致電requestLayout()
。這是我知道的唯一途徑。
是的,你可以在Android中動態設置視圖的位置。同樣,您的xml文件中有ImageView
,LinearLayout
。因此,您可以通過LayoutParams
來設置其位置。但請務必根據xml文件中採用的佈局設置LayoutParams
。根據所採用的佈局,有不同的LayoutParams
。
下面是設置代碼:
LayoutParams layoutParams=new LayoutParams(int width, int height);
layoutParams.setMargins(int left, int top, int right, int bottom);
imageView.setLayoutParams(layoutParams);
我希望這將有助於您設置的位置。
也注意到你必須導入android.widget.LinearLayout.LayoutParams;因爲默認值是來自setTop()的文檔的ViewGroup的LayoutParams –
我會建議使用setTranslationX
和setTranslationY
。我只是自己開始做這件事,但這些似乎是移動視圖的最安全和首選的方式。我想這很大程度上取決於你想要做什麼,但這對我來說適合2D動畫。
有一個名爲NineOldAndroids的庫,它允許您將Honeycomb動畫庫一直使用到版本1。
這意味着您可以使用略有不同的界面來定義左側,右側的translationX/Y。
這裏是它如何工作的:
ViewHelper.setTranslationX(view, 50f);
你只需要使用從視圖助手類的靜態方法,通過圖以及曾經珍惜你要設置它。
使用LayoutParams。 如果你使用,你必須導入android.widget.LinearLayout.LayoutParams一個LinearLayout中,否則導入的LayoutParams的正確版本爲您所使用的佈局,否則會引起ClassCastException異常,則:
LayoutParams layoutParams=new LayoutParams(int width, int height);
layoutParams.setMargins(int left, int top, int right, int bottom);
imageView.setLayoutParams(layoutParams);
注意:您也可以使用imageView.setLeft(int dim),但是這不會設置組件的位置,它只會設置組件的左邊框的位置,其餘的將保持在相同的位置。
所以我們該如何移動在不影響原始視圖的情況下查看具體位置? – james
我不確定我是否理解你的問題,因爲如果你想移動視圖,你會改變它,因爲你正在移動它。無論如何,如果你想獨立於另一個視圖移動一個視圖,你可能需要一個FrameLayout視圖來展現你的主佈局,然後在其內部,你可以放置你的獨立視圖(顯然,如果你希望它在你的主視圖下移動,必須在您的主要之前放置FrameLayout) –
有不同的有效答案了,但沒有一個似乎正確的建議方法(縣)在這種情況下使用的,除爲相應的API級別限制:
如果您可以等待一個佈局週期和父視圖組支持
MarginLayoutParams
(或子類),設置marginLeft
/marginTop
艾科rdingly。如果您需要立即持續更改位置(例如對於PopupMenu錨點),請使用相同的座標另外調用
layout(l, t, r, b)
。這將搶佔佈局系統將在稍後確認的內容。對於直接(臨時)更改(例如動畫),請改爲使用
setX()
/setY()
。如果父級大小不依賴於WRAP_CHILDREN,那麼專門使用setX()
/setY()
可能會很好。決不使用
setLeft()
/setRight()
/setBottom()
/setTop()
,見下文。
背景: 的mLeft
/mTop
/mBottom
/mRight
字段獲得從對應的LayoutParams在佈局填充()。 Android視圖佈局系統隱式地和異步地調用佈局。因此,設置MarginLayoutParams
似乎是永久設置該位置的最安全和最乾淨的方式。然而,在一些情況下,異步佈局滯後可能是個問題,例如,當使用視圖渲染遊標時,它應該被重新定位並同時用作PopupMenu錨點。在這種情況下,撥打layout()
對我來說工作得很好。
與setLeft()
和setTop()
的問題是:
稱他們單獨是不夠的 - 你還需要調用
setRight()
和setBottom()
避免拉伸或收縮的觀點。這些方法的實現看起來比較複雜(=做一些工作,以解決造成他們每個人的看法大小的變化)
他們似乎會導致輸入字段奇怪的問題:EditText soft numeric keyboard sometimes does not allow digits
setX()
和setY()
在佈局系統外部工作,相應的值被視爲佈局系統確定的左/上/下/右值的附加偏移,從而相應地移動視圖。它們似乎已添加爲動畫(即不需要通過佈局循環即可立即生效)。
你好Stefan。您能否提供一些書籍或文章,以瞭解Android佈局系統的工作原理。我明白,onMeasure()onDraw()調用layout()的順序,但想知道更多細節。在此先感謝 –
不幸的是我不能 - 最好的和最權威的參考似乎是實際的Android源代碼O :) –
- 1. 如何在代碼中設置位置動態文本視圖?
- 2. 如何在Android視圖中動態設置圖像
- 3. Android - 如何在onLayout中設置子視圖的位置
- 4. 如何在android中設置視圖的x位置
- 5. Android:如何不重疊動態視圖? +視圖的動態位置
- 6. 在地圖視圖中設置位置
- 7. 如何使用ActionScript3.0的設置在圖像的動態位置?
- 8. Android視圖 - 動態設置寬度
- 9. Android。如何在創建時移動圖像視圖(設置位置/邊距)
- 10. 如何設置動態通過位置
- 11. 如何在android中動態設置layout_gravity?
- 12. 動態添加圖片視圖並設置其位置
- 13. 在android中如何設置列表視圖0位置爲靜態,其餘爲動態?
- 14. 如何在Android中以相對佈局設置圖像視圖的位置?
- 15. 如何在Android中將動態創建的位圖設置爲livefolder圖標?
- 16. 如何動態設置圖片視圖的文本視圖
- 17. Android設置動態圖標
- 18. hortizontal滾動視圖的Android設置位置
- 19. SSRS動態設置表位置/位置
- 20. 如何在RecyclerView中設置每個視圖自己的位置?
- 21. 如何在WPF中動態設置孩子的位置
- 22. 如何在andengine中設置動態身體的位置?
- 23. 如何在WSDL中動態設置SOAP地址的位置?
- 24. 如何在約束佈局中動態設置ImageView的位置
- 25. 如何使用caliburn.micro設置視圖模型的滾動位置?
- 26. 如何在WPF MVVM中動態設置視圖的DataContext
- 27. Android位置視圖
- 28. Android獲取視圖在水平滾動視圖中的位置
- 29. 如何在Android中設置GridView的滾動位置?
- 30. 如何在Android AppWidget中設置ListView的初始滾動位置?
http://developer.android.com/reference/android/view/View.html#setTop%28int%29:'設置此視圖的頂部位置相對於其父母。這種方法是由佈局系統調用,通常不應該被調用,否則,因爲該屬性可能隨時被佈局改變。「 - 所以也許這不是一個好主意;) – katzenhut