2012-07-05 23 views
6

Tôi có một tùy chỉnh ViewGroup với một số chế độ xem bên trong.force onLayout trong subView có kích thước không thay đổi

Để trả lời sự kiện, một requestLayout được gọi và trong OnLayout một số chế độ xem sẽ nhận vị trí bố cục mới.

Một trong số họ duy trì vị trí của nó nhưng cần được sắp xếp lại bên trong. Tuy nhiên phương thức onlayout của view này sẽ không được gọi vì vị trí layout của nó không thay đổi. Cố gắng gọi requestLayout, forceLayout hoặc invalidate trong chế độ xem này không hoạt động.

Thủ thuật bẩn thỉu duy nhất mà tôi tìm thấy là thay đổi một số vị trí giá trị của nó để buộc thay đổi bố cục, nhưng tôi nghĩ cần có cách tốt hơn. Vì vậy, bây giờ tôi làm điều gì đó (khủng khiếp) như:

int patch = 0; 
    @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { 
     ... 
     _myView.patchedLayout(patch); 
     _myview.layout(l1, t1 , r1, t1+patch); 
     patch = (patch+1) % 2; 
     ... 
    }  

Bất kỳ cách nào để có được kết quả tương tự một cách tốt hơn?

Trả lời

4

cuối cùng tôi đã có những giải pháp: Tôi cần phải ghi đè onMeasure và chắc chắn để gọi mesure theo quan điểm của tôi:

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    ... 
    _myview.measure(widthMeasureSpec, heightMeasureSpec); 
    ... 

Nó sẽ đặt cờ LAYOUT_REQUIRED trong mPrivateFlags lĩnh vực riêng của xem để nó sẽ buộc phải gọi onLayout

Các vấn đề liên quan