2010-07-10 17 views
9

có cách nào để có được mọi chế độ xem bên trong hoạt động của tôi không? Tôi có hơn 200 điểm bao gồm các nút, và hình ảnh, vì vậy tôi muốn để có thể truy cập chúng bằng cách sử dụng một vòng lặpLàm cách nào để có được tất cả Lượt xem trong một hoạt động?

ví dụ một cái gì đó giống như

for (View v : this) 
{ 
    //do something with the views 
    //depending on the types (button, image , etc) 
} 

Trả lời

22

là có một cách để có được tất cả các điểm rằng là bên trong hoạt động của tôi?

Get gốc của bạn View, bỏ nó vào một ViewGroup, gọi getChildCount()getChildAt(), và recurse khi cần thiết.

Tôi có hơn 200 điểm bao gồm nút, và hình ảnh, vì vậy tôi muốn trở thành thể truy cập chúng bằng cách sử dụng một vòng lặp

Đó là một con số khá lớn Views.

+0

cảm ơn rất nhiều, hoàn hảo một đối tượng vô hình (nút) đang chặn toàn bộ màn hình của tôi, tôi sử dụng công cụ này để tìm hiểu mục nào đang chặn và tìm thấy nó :) – aryaxt

+6

Công cụ 'hierarchyviewer' đi kèm với SDK có thể giúp bạn tìm các vấn đề như thế này. Nó có thể hiển thị phân cấp chế độ xem của ứng dụng trực quan dưới dạng cây, cho phép bạn kiểm tra các thuộc tính của từng chế độ xem. – adamp

+1

Tôi biết nhưng hầu hết các đối tượng được thêm vào màn hình thông qua mã. – aryaxt

1

Cố gắng tìm tất cả chế độ xem được liên kết với Hoạt động.

cung cấp lệnh sau.

ViewGroup viewgroup=(ViewGroup)view.getParent(); 
viewgroup.getchildcount(); 

lặp qua vòng lặp.

Chúng tôi sẽ nhận được kết quả.

0

Bạn có thể sử dụng trình xem phân cấp, Nó cho phép bạn xem cấu trúc phân cấp khung nhìn bao gồm cả thứ bậc được tạo trong mã. Đó là lý do chính để gỡ lỗi những thứ như thế này. Android Studio mới nhất hiện có tính năng này trong Device Monitor cho phép bạn tạo một kết xuất UI để gỡ lỗi nó.

2

Để cụ thể:

private void show_children(View v) { 
    ViewGroup viewgroup=(ViewGroup)v; 
    for (int i=0;i<viewgroup.getChildCount();i++) { 
     View v1=viewgroup.getChildAt(i); 
     if (v1 instanceof ViewGroup) show_children(v1); 
     Log.d("APPNAME",v1.toString()); 
    } 
} 

Và sau đó sử dụng chức năng ở đâu đó:

show_children(getWindow().getDecorView()); 

để hiển thị tất cả xem trong Hoạt động hiện hành.

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