2010-04-13 38 views
41

Android đi kèm với nhiều tài nguyên hệ thống (android.R) có thể được sử dụng để giúp bạn tiết kiệm thời gian và làm cho ứng dụng của bạn nhẹ hơn.Tài nguyên hệ thống Android hữu ích

Ví dụ, tôi vừa mới khám phá ra rằng Android cung cấp dây cục bộ cho Yes (android.R.string.yes), Không (android.R.string.no), Cancel (android.R.string.cancel) và Ok (android.R.string.ok), trong số chuỗi khác.

Bạn đang sử dụng tài nguyên hệ thống nào khác? Hoặc có lý do nào để tránh sử dụng tài nguyên hệ thống không?

Edit: Theo ghi nhận của Tomas, một số tài nguyên này có thể không tạo ra kết quả mà bạn mong chờ (đặc biệt, android.R.string.yes/no lợi nhuận OK/Cancel thay vì Yes/No, theo báo cáo here). Để kiểm soát tốt hơn, bạn có thể sao chép tài nguyên hệ thống từ mã nguồn Android.

+2

Làm cách nào để bạn truy cập chúng từ xml? –

+0

"Hoặc có lý do để tránh sử dụng tài nguyên hệ thống không?" - Trong trường hợp bạn đang sử dụng tài nguyên hệ thống như biểu tượng, không đảm bảo rằng biểu tượng tương tự có sẵn trên tất cả các phiên bản của Android, có thể dẫn đến ứng dụng của bạn không nhất quán . – codeMan

+0

Bỏ phiếu để đóng quá rộng/dựa trên ý kiến. –

Trả lời

46

Bạn có thể tìm danh sách đầy đủ tất cả tài nguyên hệ thống trong số android package.

Mỗi lần tôi muốn làm điều gì đó trên Android, tôi kiểm tra xem liệu có tài nguyên hệ thống bao gồm những gì tôi muốn làm hay không. Bạn nên nhập mã nguồn Android (cụ thể là their /res/ folder) khi tìm kiếm các tài nguyên đã được triển khai mà bạn có thể muốn, vì vậy bạn có thể xem triển khai cụ thể của chúng.

Cá nhân, tôi thấy mình thường xuyên nhất sử dụng:

  • Built-in bố trí Android cho các nhiệm vụ tiêu chuẩn, chẳng hạn như Dropdowns spinner.
  • id Android (android.R.id), bởi vì bạn thường phải sử dụng những nếu bạn muốn sử dụng một số vật dụng Android (ví dụ, TabHost/TabWidget đòi hỏi bạn phải sử dụng "android:id/tabhost", "android:id/tabs" và "android:id/tabcontent" nếu bạn muốn triển khai bố cục XML).
  • Màu tích hợp, đặc biệt là android.R.color.transparent.
  • Hoạt ảnh mờ dần và mờ dần trong Android ở android.R.anim.
+9

Hãy nhớ rằng những tài nguyên đó được gửi kèm theo SDK của bạn. Tìm trong thư mục 'data/res /' bên dưới một thư mục nền tảng cụ thể. Tôi sẽ cẩn thận sử dụng lại những thứ có thể bị thay đổi bởi các OEM - các tài nguyên có thể vẽ được sẽ là một vấn đề ví dụ. – CommonsWare

+0

@CommonsWare Khi chạy trên một thiết bị thực tế, tài nguyên được tải từ đâu? – ThomasW

+0

@ThomasW: Ngoài "một nơi nào đó trong phần mềm thiết bị", tôi không thể nói, vì tôi chưa bao giờ tìm kiếm chi tiết cụ thể. Lấy làm tiếc! – CommonsWare

6

Như CommonsWare đã đề cập, bạn không phải tải xuống kho lưu trữ nguồn Android để kiểm tra tài nguyên; chỉ cần truy cập <android-sdk-dir>/platforms/android-X.X/data/res/. Tuy nhiên, nếu bạn bắt đầu sử dụng chúng, bạn sẽ nhanh chóng trở nên thất vọng khi thấy rằng hầu hết trong số đó là không phải là có sẵn thông qua lớp android.R. Hầu hết thời gian tôi phải nhập chúng vào không gian làm việc Eclipse của tôi. :-(

Tài nguyên yêu thích của tôi là các mục có thể hiển thị khác nhau dựa trên trạng thái bị tập trung/nhấn/bị vô hiệu của điều khiển (như android.R.drawable.btn_default) .Tôi sử dụng hoặc chỉnh sửa chúng để tạo các nút tùy chỉnh cho ứng dụng của mình Như bạn có thể thấy nếu bạn nhìn vào /data/res/drawable/btn_default.xml, chúng được định nghĩa là một phần tử XML <selector>, được tăng thêm vào một thời gian chạy StateListDrawable. Bạn cũng có thể tạo các StateListDrawables của riêng mình và chúng hữu ích, cả dưới dạng hình nền Xem và dưới dạng nút của "hợp chất drawable" (xem TextView.setCompoundDrawables()).

+0

Tôi tự hỏi, khi chạy trên một thiết bị thực tế, nguồn tài nguyên được tải từ đâu? – ThomasW

1

Xin lưu ý rằng các bản dịch thực sự là xấu.

Ví dụ: tiếng Đức "không" trong android-25 là "Abbrechen" có nghĩa là "hủy". "Có" được dịch là "OK" ...

Tôi không chắc chắn các ngôn ngữ khác tốt như thế nào, vì vậy tôi sẽ sử dụng bản dịch của riêng mình.

+0

Nó không phải là bản dịch là xấu. Như OP đã lưu ý trong câu hỏi của anh ta, đó là 'android.R.string.yes/no' trả về' OK/Cancel' thay vì 'Có/Không'. Điều này có thể là do nhà phát triển nghĩ rằng 'android.R.string.yes/no' ngắn gọn hơn' android.R.string.ok/cancel'. – Patrick

+1

Ngoài ra, 'android.R.string.ok' dường như không được dịch. Đó là "OK" cho mọi ngôn ngữ tôi đã thử nghiệm. (Đối với một số ngôn ngữ, "OK" không phù hợp.) – ThomasW

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