2011-10-19 5 views
7

¿Hay alguna manera de establecer el contenido de una NativeActivity en un componente creado en Java (como FrameLayout, ImageView, etc.)? Tengo la necesidad de usar NativeActivity (para obtener la entrada del panel táctil en Xperia Play), pero también necesito poder ver los componentes creados en el código de Java.Cómo configurar la vista de contenido de NativeActivity al componente creado en Java

He tratado de sobreescribir el comando onCreate y llamar a setContentView allí, pero aunque eso no arroja ningún error, tampoco hace nada (aparentemente porque la vista de contenido ya está configurada por el código nativo). ¿Hay algún tipo de identificación de ventana o algo que pueda pasar al código nativo para decirle cuál debe ser la vista de contenido, o puede configurarse de alguna manera en el XML para establecer la vista de contenido de NativeActivity en un componente que puedo modificar de Java?

Avíseme si necesita más información.

+0

Resolvió este problema, estoy tratando de hacer algo similar. ¡La documentación provista por Sony es terrible! – Kevin

Respuesta

12

Voy a publicar la respuesta aquí para otros con el mismo problema, ya que eventualmente descubrí un método que funciona.

En el método onCreate(), si está configurando indicadores de ventana específicos (FEATURE_NO_TITLE, FLAG_FULLSCREEN, FLAG_KEEP_SCREEN_ON, etc.) antes de llamar a super.onCreate() (o se ignorarán). A continuación, dondequiera que pondría normalmente esto:

setContentView(whatever); 

debe hacerse lo siguiente:

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

Esa es la forma básica para obtener el contenido para ser controlado desde el lado de Java. Cualquier lugar en su código donde maneje el contenido, use "getWindow()" en lugar de "this".

Algunas otras cosas a tener en cuenta, son que los métodos normales onKey y onTouch no se llamarán (sus equivalentes nativos serán en su lugar), así que si necesita poder procesar la entrada en el lado de Java, ' Tendré que configurar algunos enlaces JNI para enviar la información de nativa a Java. Creo que todo lo demás está incluido en el código de muestra del panel táctil XPeria Play oficial (las adiciones a AndroidManifest.xml y what-not).

Si desea buscar en mi proyecto de referencia, que es de código abierto y se puede encontrar en:

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

Simplemente haga clic en el enlace "código fuente" al lado de "Touch-Xperia Play Ejemplo de almohadilla ". Sin embargo, puede que no sea tan útil para usted, porque es un proyecto bastante grande y puede ser difícil encontrar lo que está buscando. Si tiene algún problema, publique una pregunta en mi foro o envíeme un correo electrónico, y estaremos encantados de ayudarlo.

+2

Enfoque interesante. Logré usar mi propio diseño dentro de NativeActivity. Todavía necesito mostrar qué es renderizado por una biblioteca C++ que estoy usando (en este caso Cocos2d-x 3.x). ¿Hay alguna forma de insertar un SurfaceView o similar y vincularlo al código C++? – Soflete

+0

@paulscode enlace que envía es 404 o prohibido –

+0

@AmitHooda el enlace está bien, pero su IP puede estar bloqueada (mi host tiene estrictas medidas contra el correo no deseado en su lugar) – paulscode

Cuestiones relacionadas