2012-05-24 43 views
11

Trong các ứng dụng của tôi, tôi thường dựa vào các chế độ xem xây dựng tùy chỉnh, chẳng hạn như trong ví dụ sau.Chế độ xem Android tùy chỉnh trong Trình chỉnh sửa trực quan của Eclipse

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:background="@color/light_grey" 
android:layout_height="match_parent" 
android:layout_width="fill_parent" > 

<TextView 
style="@style/CardTitle" 
android:id="@+id/card_title" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent"  
/> 

<com.whiterabbit.cards.ui.AspectRatioImageView 
    android:id="@+id/card_picture" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:adjustViewBounds="true" 
    android:layout_marginLeft="30dip" 
    android:layout_marginRight="30dip"  
    android:src="@drawable/boss" 
    /> 



<ListView 
    android:id="@+id/card_properties" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 

/> 

Vấn đề là, tôi không biết làm thế nào nếu nó sẽ được hiển thị một cách chính xác cho đến khi tôi chạy nó trên một thiết bị thật hay trên giả lập. Hơn nữa, nếu tôi tìm thấy một cái gì đó sai, tôi sẽ phải thực hiện thay đổi trên nó và triển khai các ứng dụng một lần nữa để xem nếu những thay đổi làm việc như bạn mong đợi.

Đây có thể là một quá trình dài và nhàm chán, đặc biệt nếu ứng dụng yêu cầu một số tương tác để đến hoạt động bạn muốn kiểm tra.

Sử dụng trình chỉnh sửa hình ảnh không hoạt động vì không thể tải chế độ xem tùy chỉnh.

Có cách nào khác để kiểm tra cách chế độ xem được hiển thị mà không chạy trên toàn bộ ứng dụng không?

+0

Cảm ơn @Blundell đã sửa đổi câu hỏi của tôi – fedepaol

Trả lời

54

Bạn có thể làm điều này trong Custom View của bạn:

if(!isInEditMode()){ 
    // Your custom code that is not letting the Visual Editor draw properly 
    // i.e. thread spawning or other things in the constructor 
} 

http://developer.android.com/reference/android/view/View.html#isInEditMode()

Điều này cho phép bạn ẩn các mã từ ADT Plugin XML Viewer và hy vọng hiển thị bạn một cách bố trí!

View.isInEditMode()

Cho biết Xem này hiện đang trong chế độ chỉnh sửa. Chế độ xem là thường ở chế độ chỉnh sửa khi được hiển thị trong công cụ nhà phát triển. Đối với trường hợp , nếu Chế độ xem này đang được vẽ bởi giao diện người dùng trực quan trình tạo, phương thức này sẽ trả về true. Các lớp con nên kiểm tra giá trị trả về của phương pháp này để cung cấp các hành vi khác nhau nếu hành vi bình thường của chúng có thể ảnh hưởng đến môi trường máy chủ. Đối với cá thể : lớp sinh ra một chuỗi trong hàm tạo của nó, mã bản vẽ dựa trên các tính năng dành riêng cho thiết bị, v.v. Phương pháp này thường là được chọn trong mã vẽ của tiện ích tùy chỉnh.

0

Bạn có thể tạo hoạt động bộ xương chỉ tải chế độ xem mà bạn muốn xem và điền vào nó với đủ dữ liệu để làm cho nó hiển thị.

0

Tôi đang sử dụng Android Studio vì vậy tôi không chắc chắn câu trả lời này sẽ áp dụng cho trường hợp của bạn.

Tôi nghĩ rằng bạn có thể ghi đè lên onDraw phương pháp trong giao diện tùy chỉnh, như dụ này giữ tỷ lệ khía cạnh của một hình ảnh bên trong:

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    // TODO: consider storing these as member variables to reduce 
    // allocations per draw cycle. 
    int paddingLeft = getPaddingLeft(); 
    int paddingTop = getPaddingTop(); 
    int paddingRight = getPaddingRight(); 
    int paddingBottom = getPaddingBottom(); 

    int w = getWidth() - paddingLeft - paddingRight; 
    int h = getHeight() - paddingTop - paddingBottom; 

    w = w<h ? w : h; 
    h = w; 

    // Draw the example drawable on top of the text. 
    if (dieDrawable != null) { 
     dieDrawable.setBounds(paddingLeft, paddingTop, 
     paddingLeft + w, paddingTop + h); 
     dieDrawable.draw(canvas); 
    } 
} 

Phương pháp này chạy cả trong giả lập và các nhà thiết kế.

Nó cũng chạy cho bất kỳ sự kiện nào để vẽ lại chế độ xem (onSizeChanged, onLayout, v.v.)

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