2012-02-20 24 views
7

Tôi có lớp phủ View được quản lý bởi WindowManager, giống như trong this question.Android: thay đổi LayoutParams of View được thêm bởi WindowManager

Tóm lại, nó trông như thế này:

WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
my_view_layout_params = new WindowManager.LayoutParams(
     WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
     WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, 
     PixelFormat.TRANSLUCENT); 

wm.addView(my_view, my_view_layout_params); 

Nó hoạt động, nhưng nếu tôi cần phải thay đổi params bố trí, tôi cần phải loại bỏ Xem và thêm một lần nữa, như vậy:

wm.removeView(my_view); 
wm.addView(my_view, my_view_layout_params); 

Nó trông không đẹp lắm. Tôi đã cố gắng để làm my_view.setLayoutParams(my_view_layout_params), nhưng nó không hoạt động không may. Tôi làm nó như thế nào?

+0

Bạn có thể không làm view.getLayoutParams(), cập nhật các đối tượng trở layoutparams, và sau đó gọi view.requestLayout() ? –

+0

Reuben, cảm ơn bạn đã trả lời, nhưng tiếc là nó không hoạt động. tôi làm 'view.getLayoutParams()', sau đó tôi thay đổi 'gravity' của LayoutParams trả về, làm 'view.requestLayout()', và không có gì thay đổi. –

+1

WindowManager có một thành viên updateViewLayout() ... chắc chắn đó là chính xác những gì bạn muốn? –

Trả lời

11

WindowManager có thành viên updateViewLayout() ... chắc chắn đó là chính xác những gì bạn muốn?

(như trả lời ban đầu trong bình luận)

+1

Phương pháp này rất hữu ích nhưng hãy cẩn thận vì một số thuộc tính như loại Cửa sổ không thể thay đổi sau khi được đặt, bạn sẽ nhận được FC nếu bạn thử. – Tom

+0

điều này có hiệu quả. Không cần sử dụng 'setLayoutParams'. Cảm ơn bạn! –

+0

Tôi có thể sử dụng phương thức updateViewLayout() này ở đâu? –

3

Bạn có thể sử dụng này:

wm.updateViewLayout(my_view,my_view_layout_params); 
Các vấn đề liên quan