Как настроить представление содержимого NativeActivity для компонента, созданного в Java - PullRequest
7 голосов
/ 19 октября 2011

Есть ли способ установить содержимое NativeActivity для компонента, созданного в Java (например, FrameLayout, ImageView и т. Д.)?Мне нужно использовать NativeActivity (для получения ввода с сенсорной панели в Xperia Play), но мне также нужно иметь возможность просматривать компоненты, созданные в коде Java.

Я попытался переопределить команду onCreate и вызватьтам есть setContentView, но, хотя это и не выдает никаких ошибок, оно тоже ничего не делает (очевидно, потому что представление контента уже установлено собственным кодом).Есть ли какой-то идентификатор окна или что-то, что я мог бы передать нативному коду, чтобы сказать ему, каким должно быть представление содержимого, или это можно как-то настроить в XML, чтобы установить представление содержимого NativeActivity для компонента, который я могу изменитьс Java?

Дайте мне знать, если вам нужна дополнительная информация.

1 Ответ

12 голосов
/ 28 ноября 2011

Я опубликую ответ здесь для других с такой же проблемой, так как в конце концов я выяснил способ, который работает.

В методе onCreate (), если вы устанавливаете какие-либо конкретные флаги окна (FEATURE_NO_TITLE, FLAG_FULLSCREEN, FLAG_KEEP_SCREEN_ON и т. Д.) Делают это до вызова super.onCreate () (или они будут проигнорированы).Тогда куда бы вы обычно не помещали это:

setContentView( whatever );

Сделайте это вместо этого:

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

Это основной способ получения контента, который будет контролироваться со стороны Java.В любом месте вашего кода, где вы имеете дело с контентом, используйте «getWindow ()» вместо «this».

Некоторые другие вещи, которые следует иметь в виду, это то, что обычные методы onKey и onTouch не будут вызываться(вместо них будут использоваться их собственные эквиваленты), поэтому, если вам понадобится обрабатывать ввод на стороне Java, вам нужно будет установить некоторую связь JNI для отправки информации с нативного на Java.Я полагаю, что все остальное включено в официальный пример кода сенсорной панели XPeria Play (дополнения к AndroidManifest.xml и что-то не так).

Если вы хотите посмотреть на мой проект для справки, это открытый коди можно найти по адресу:

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

Просто нажмите ссылку «Исходный код» рядом с «Примером сенсорной панели XPeria Play».Это может быть не так уж полезно для вас, потому что это довольно большой проект и может быть трудно найти то, что вы ищете.Если у вас возникнут проблемы, опубликуйте вопрос на моем форуме или напишите мне, и я с радостью помогу.

...