Ландшафтный экран для 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 и эту статью.