#android #cordova #cordova-plugins
#Android #кордова #cordova-плагины
Вопрос:
Я изо всех сил стараюсь разработать плагин, который может прослушивать изменение ориентации, чтобы вносить необходимые изменения без существенного добавления кода javascript или необходимости редактировать код activity java.
Есть возможность использовать orientationChangeListener, но мне нужно прослушивать только переключение между портретным и альбомным режимами, а не заголовок устройства. Это удобно, но слишком чудовищно для такой маленькой задачи.
Есть ли какие-либо другие варианты для решения этой проблемы? Возможно ли изменить метод onConfigurationChanged основного действия или создать какой-либо новый прослушиватель onCofigurationChange? Или на самом деле CordovaPlugin не знает, что происходит вокруг него?
Ответ №1:
Ваш плагин Cordova требует написания кода как на Javascript, так и на Java. Поскольку вы все равно собираетесь писать Javascript, разве этого недостаточно?
window.addEventListener("orientationchange", function() {
if (Math.abs(window.orientation) === 90) {
// landscape view
} else {
// portrait view
}
}, false);
Комментарии:
1. Я не знаю, если нужен какой-то код Javascript, я планирую этот плагин без кода Javascript (и со взглядом на plugin.xml , это возможно) управляется config.xml предварительные настройки. (И если это необходимо, я, конечно, могу создать пустой код Javascript.) Ваш код, безусловно, работает, но неэффективен, потому что интерфейс Java Cordova вызывает событие изменения ориентации Javascript, а затем Javascript вызывает основной Java-код. Есть бессмысленный вызов по мосту между Java и WebView, когда код Javascript на самом деле не нужен. (Я надеюсь)
2. Что ж, если вы не хотите использовать Javascript, возможно, вам не следует использовать Cordova.
3. Хм, я думаю, вопрос ясен, поэтому я не понимаю, почему там упоминается Javascript. Я спрашиваю о лучшем и элегантном решении.
Ответ №2:
Я нашел решение для этого (благодаря Эндрю Гриву из списка рассылки Cordova), поэтому я публикую его здесь, если у кого-то возникнет подобная проблема. Ключ — это onLayoutChangeListener просмотра (WebView или другой вид, если плагин добавит какой-либо).
Поместите приведенный ниже код внутри какого-либо метода плагина:
webView.addOnLayoutChangeListener(new OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right,
int bottom, int oldLeft, int oldTop, int oldRight,
int oldBottom) {
// some code
}
});
Однако есть одно большое НО. Этот прослушиватель доступен в API11 , поэтому не работает на Android 2.2 или 2.3…