2010-05-10 27 views
11

Tôi đang làm việc trên một ứng dụng cho Android với một vài người khác và nội dung chính được chỉ định bởi nhà thiết kế của chúng tôi dưới dạng tệp văn bản ở định dạng tệp nhất định. , xử lý và phân phối trong ứng dụng. Chúng tôi hiện đang lưu trữ chúng trong res/raw.Nội dung chế biến của res/raw programatically (Android)

Điều này làm cho mọi thứ trở nên tuyệt vời cho các nhà thiết kế vì khi họ muốn thêm nội dung, họ chỉ cần thêm tệp vào res/raw. Tuy nhiên, điều này gây khó chịu với tư cách là một nhà phát triển, vì các nhà phát triển của chúng tôi cần phải thêm R.raw.the_new_file vào một mảng trong mã chỉ định tệp sẽ xử lý khi khởi động.

Có cách nào để truy cập ID tài nguyên của res/raw theo chương trình không? Lý tưởng nhất là khi ứng dụng bắt đầu, chúng ta có thể thực hiện cuộc gọi để xem các tệp nào nằm trong res/raw, xử lý tất cả chúng, vì vậy chúng tôi có thể loại bỏ chi phí nhỏ với nội dung của res/raw với các mảng của chúng tôi trong mã.

Con đường đầy hứa hẹn nhất mà tôi đã nhìn thấy là getAssets từ Resources, mà sẽ cho phép tôi gọi list(String) trên AssetManager, nhưng tôi đã gặp rắc rối khi này để làm việc, đặc biệt là kể từ khi bạn không thể trực tiếp gọi "res/raw" như filepath của bạn (hoặc ít nhất, nó đã không làm việc khi tôi đã cố gắng.

Gợi ý? Cảm ơn

Trả lời

15

Bạn có thể sử dụng phản chiếu.


ArrayList<Integer> list = new ArrayList<Integer>(); 
Field[] fields = R.raw.class.getFields(); 
for(Field f : fields) 
try { 
     list.add(f.getInt(null)); 
    } catch (IllegalArgumentException e) { 
    } catch (IllegalAccessException e) { } 

Sau khi danh sách đó chứa tất cả ID tài nguyên trong thư mục res/raw. Nếu bạn cần tên của tài nguyên ... f.getName() trả về nó.

+0

Cảm ơn, muộn để chấp nhận nhưng tôi đã quên rằng tôi đã không. Làm việc như người ở! –

1

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

Context.getResources().getIdentifier("filename", "raw", "packagename"); 

để có được những i thích hợp răng giả. Tuy nhiên tôi không hiểu tại sao bạn thực hiện giải pháp của bạn phức tạp? những lợi thế cho nhà thiết kế là gì? tại sao họ không chỉ đặt các tập tin trong thư mục drawable?

+0

Điều này thực sự không dành cho đồ họa, nhưng đối với các cấp trong trò chơi. Mỗi cấp độ có một bản đồ tĩnh, một số lượng các đối tượng động, các vị trí cho các đối tượng, thông báo mức cụ thể, một số cấu hình, vv Thay vì có các nhà thiết kế cấp trực tiếp chỉnh sửa codebase của chúng tôi, chúng tôi đã viết một trình phân tích cú pháp để cho phép chúng chỉ định các mức khai báo trong các tệp văn bản; và chúng tôi đã chọn để đặt chúng trong res/raw. Cảm ơn mẹo! Tôi sẽ thử và cho bạn biết làm thế nào nó đi^_^ –

5

Câu trả lời này có thể hơi muộn, bạn nên sử dụng thư mục nội dung thay thế. Ở đó bạn có thể có một hệ thống phân cấp thư mục và đọc nó như là một hệ thống tập tin.

Để biết thông tin của bạn, getAssets trả về người quản lý các tệp trong thư mục "nội dung" của dự án Android của bạn chứ không phải trong "res/raw". "res/raw" được đưa vào Gói Java "R". assets.list(path) Trả về một mảng tệp trong thư mục đã cho tương ứng với thư mục nội dung của bạn. Thư mục của tài sản cũng không phải là thư mục truyền thống, nhưng Android tóm tắt thư mục để nó "cảm thấy" như các tệp thông thường. Điều này trở nên quan trọng hơn nếu bạn đang làm JNI và muốn đọc tài sản của bạn từ c/C++.

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