2011-10-19 12 views
7

Có cách nào để đặt nội dung của NativeActivity thành thành phần được tạo trong Java (chẳng hạn như FrameLayout, ImageView, v.v ...) không? Tôi có nhu cầu sử dụng NativeActivity (để nhận đầu vào bàn di chuột trên Xperia Play), nhưng tôi cũng cần có khả năng xem các thành phần được tạo trong mã Java.Cách đặt chế độ xem nội dung của NativeActivity thành thành phần được tạo trong Java

Tôi đã cố gắng ghi đè lệnh onCreate và gọi setContentView ở đó, nhưng mặc dù không ném bất kỳ lỗi nào, nó cũng không thực hiện bất kỳ điều gì (rõ ràng vì chế độ xem nội dung đã được đặt bởi mã gốc). Có một số loại id cửa sổ hoặc thứ gì đó mà tôi có thể chuyển sang mã gốc để cho nó biết nội dung nên là gì không, hoặc bằng cách nào đó có thể được thiết lập trong XML để đặt chế độ xem nội dung của NativeActivity thành thành phần mà tôi có thể sửa đổi từ Java?

Hãy cho tôi biết nếu bạn cần thêm bất kỳ thông tin nào.

+0

Bạn đã giải quyết được vấn đề này chưa, tôi đang cố gắng thực hiện một điều tương tự. Các tài liệu được cung cấp bởi Sony là khủng khiếp! – Kevin

Trả lời

12

Tôi sẽ đăng câu trả lời ở đây cho những người khác có cùng vấn đề, vì cuối cùng tôi đã tìm ra phương pháp hoạt động.

Trong phương thức onCreate(), nếu bạn đang đặt bất kỳ cờ cửa sổ cụ thể nào (FEATURE_NO_TITLE, FLAG_FULLSCREEN, FLAG_KEEP_SCREEN_ON, v.v.) thực hiện trước khi bạn gọi super.onCreate() (hoặc chúng sẽ bị bỏ qua). Sau đó, bất cứ nơi nào bạn thường đặt này:

setContentView(whatever); 

Làm điều này thay vì:

getWindow().takeSurface(null); 
getWindow().setContentView(whatever); 

Đó là cách cơ bản để có được những nội dung phải được kiểm soát từ phía Java. Bất kỳ vị trí nào trong mã của bạn nơi bạn xử lý nội dung, hãy sử dụng "getWindow()" thay vì "this". Một số điều khác cần lưu ý, đó là các phương thức onKey và onTouch bình thường sẽ không được gọi (tương đương nguyên gốc của chúng sẽ thay thế), vì vậy nếu bạn cần để có thể xử lý đầu vào ở phía Java, thì bạn sẽ '' sẽ phải thiết lập một số liên kết JNI để gửi thông tin từ bản địa đến Java. Tôi tin rằng mọi thứ khác được bao gồm trong mã mẫu Touchpad XPeria Play chính thức (các bổ sung cho AndroidManifest.xml và những gì không).

Nếu bạn muốn xem xét dự án của tôi để tham khảo, nó là mã nguồn mở và có thể được tìm thấy tại địa chỉ:

http://www.paulscode.com/forum/index.php?topic=75.msg1540#msg1540

Chỉ cần nhấp vào liên kết "mã nguồn" bên cạnh "Xperia Play cảm ứng Ví dụ Pad ". Nó có thể không phải là tất cả những gì hữu ích cho bạn mặc dù, bởi vì nó là một dự án khá lớn và có thể khó khăn để tìm thấy những gì bạn đang tìm kiếm. Nếu bạn có bất kỳ vấn đề gì, hãy đăng câu hỏi lên diễn đàn của tôi ở đó hoặc gửi email cho tôi và tôi rất sẵn lòng trợ giúp.

+2

Cách tiếp cận thú vị. Tôi quản lý để sử dụng bố trí của riêng tôi trong một NativeActivity. Tôi vẫn cần hiển thị những gì được render bởi một thư viện C++ mà tôi đang sử dụng (trong trường hợp này là Cocos2d-x 3.x). Có cách nào để nhúng một SurfaceView hoặc tương tự và liên kết nó với mã C++? – Soflete

+0

@paulscode liên kết bạn gửi là 404 hoặc bị cấm –

+0

@AmitHooda liên kết là tốt, nhưng IP của bạn có thể bị chặn (máy chủ của tôi có các biện pháp chống spam nghiêm ngặt tại chỗ) – paulscode