Ландшафтный экран для Android в PhoneGap Build
Что мне следует вводить в config.xml
или что делать в целом, чтобы экран заставки приложения PhoneGap Build отображался правильно на Android-устройстве в ландшафтном режиме?
PhoneGap Build (используется для компиляции) docs/blog ничего не имею. Для Android доступен только портрет.
Так как first (docs) говорит, что использование height
и width
поддерживается кросс-платформой, я пытался его использовать:
<gap:splash src="res/splash-200x320-android.png" gap:platform="android" gap:density="ldpi" width="200" height="320" />
<gap:splash src="res/splash-320x480-android-bada-ios.png" gap:platform="android" gap:density="mdpi" width="320" height="480" />
<gap:splash src="res/splash-480x800-android-bada-wp.png" gap:platform="android" gap:density="hdpi" width="480" height="800" />
<gap:splash src="res/splash-720x1280-android.png" gap:platform="android" gap:density="xhdpi" width="720" height="1280" />
<gap:splash src="res/splash-320x200-android.png" gap:platform="android" gap:density="ldpi" width="320" height="200" />
<gap:splash src="res/splash-480x320-android-bada-ios.png" gap:platform="android" gap:density="mdpi" width="480" height="320" />
<gap:splash src="res/splash-800x480-android-bada-wp.png" gap:platform="android" gap:density="hdpi" width="800" height="480" />
<gap:splash src="res/splash-1280x720-android.png" gap:platform="android" gap:density="xhdpi" width="1280" height="720" />
Но эффекта нет - в ландшафтном режиме на моем Android-устройстве я всегда вижу неудачную версию режима заливки portait моего заставки.
Ответы
Ответ 1
Согласно моим текущим знаниям и после глубоких исследований, я обнаружил, что это подтвержденная ошибка, и мы в настоящее время ничего не можем с этим поделать.
PhoneGap Build (и, возможно, сама PhoneGap) в настоящее время не поддерживает всплывающие экраны ландшафта вообще. Я даже пробовал использовать iOS (как показано в вопросе - с использованием параметров width
и height
, официально не поддерживаемых для Android). Но он все еще не работает.
Все в порядке в портретном режиме, но независимо от того, какое устройство Android с плотностью экрана вы будете использовать - в ландшафте вы увидите уродливую деформированную портретную версию заставки.
Ответ 2
Я не использую PhoneGap Build, но мне удалось исправить это в базовом приложении Android PhoneGap.
Скажем, у вас есть два разных заставки - пейзаж и портретная версия - и вы хотите, чтобы они оба растянулись, чтобы заполнить доступную область экрана.
Поместите один в drawable
, а другой в drawable-land
. (Или drawable-land-hdpi
, drawable-land-xhdpi
и т.д., Если у вас есть несколько размеров.)
Затем убедитесь, что вы управляете конфигурационными изменениями самостоятельно в AndroidManifest.xml
:
<activity
...
android:configChanges="orientation|screenSize|keyboardHidden"
...
>
</activity>
Затем поместите это в свой основной класс Activity, который расширяет DroidGap.java
:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (super.splashDialog != null) {
ViewGroup rootView = (ViewGroup) super.splashDialog.getWindow()
.getDecorView().findViewById(android.R.id.content);
LinearLayout linearLayout = (LinearLayout) rootView.getChildAt(0);
// manually refresh the splash image
linearLayout.setBackgroundDrawable(null);
linearLayout.setBackgroundResource(R.drawable.mysplash);
}
}
Это приведет к тому, что фоновое изображение будет перерисовываться и правильно растягиваться всякий раз, когда пользователь меняет ориентацию.
Ответ 3
Это можно сделать с апреля 2014 года в PhoneGap Build с помощью gap:qualifer
, например
<gap:splash src="portrait-xxhdpi.png" gap:platform="android" gap:qualifier="port-xxhdpi" />
<gap:splash src="landscape-xxhdpi.png" gap:platform="android" gap:qualifier="land-xxhdpi" />
Подробнее см. this и эту статью.