Как установить представление о нативеактивности контента на компонент, созданный на Java

StackOverflow https://stackoverflow.com/questions/7815368

Вопрос

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

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

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

Это было полезно?

Решение

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

В методе OnCreate (), если вы настраиваете какие -либо конкретные флаги окна (feature_no_title, flag_fullscreen, flag_keep_screen_on и т. Д.) сделайте их, прежде чем вы называете Super.oncreate () (или они будут игнорированы). Тогда, где бы вы ни ставили это:

setContentView( whatever );

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

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

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

Некоторые другие вещи, которые нужно помнить, заключаются в том, что нормальные методы Onkey и Ontouch не будут вызваны (вместо этого будут их родные эквиваленты), поэтому, если вам нужно иметь возможность обрабатывать ввод на стороне Java, вам придется установить Вверх по какой -то связи JNI, чтобы отправить информацию от родной в Java. Я полагаю, что все остальное включено в официальный код примеров xperia play touchpad (дополнения к Androidmanifest.xml и что-то).

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

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

Просто нажмите на ссылку «исходный код» рядом с примером «xperia play touch-pad». Это может быть не так полезно для вас, потому что это довольно большой проект, и может быть трудно найти то, что вы ищете. Если у вас есть какие -либо проблемы, опубликуйте вопрос на моем форуме или напишите мне, и я буду рад помочь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top