Картинка в картинке - слишком большое соотношение сторон
Хорошо, я использую новый режим "картинка в картинке" (PIP) для Oreo с пользовательским соотношением сторон, которое я рассчитываю с помощью этого:
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x + (size.x / 2);
int height = size.y;
Rational aspectRatio = new Rational(width, height);
PictureInPictureParams.Builder PIPParamsBuilder = new PictureInPictureParams.Builder();
PIPParamsBuilder.setAspectRatio(aspectRatio).build();
enterPictureInPictureMode(PIPParamsBuilder.build());
В основном это дает мне немного большую ширину, чем по умолчанию. Моя проблема в том, что когда я использовал тот же код в ландшафтном режиме, я получаю эту ошибку:
java.lang.IllegalArgumentException: enterPictureInPictureMode: Aspect ratio is too extreme (must be between 0,418410 and 2,390000).
at android.os.Parcel.readException(Parcel.java:1946)
at android.os.Parcel.readException(Parcel.java:1888)
at android.app.IActivityManager$Stub$Proxy.enterPictureInPictureMode(IActivityManager.java:9750)
at android.app.Activity.enterPictureInPictureMode(Activity.java:2119)
at com.brickx.creartup.Main.startPIP(Main.java:740)
at com.brickx.creartup.Main.onUserLeaveHint(Main.java:751)
at android.app.Activity.performUserLeaving(Activity.java:7151)
at android.app.Instrumentation.callActivityOnUserLeaving(Instrumentation.java:1572)
at android.app.ActivityThread.performUserLeavingActivity(ActivityThread.java:4082)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:4058)
at android.app.ActivityThread.-wrap15(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1700)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6809)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Логи довольно явные: у меня соотношение сторон превышает максимум.
Но мой вопрос: почему я должен справиться с этим? Разве Android не может установить ширину и / или высоту на соответствующий максимум автоматически, если он превышает его?
Может быть, я что-то здесь упускаю, но я думаю, что я не должен проверять ширину устройства каждый раз, когда я вхожу в PIP на случай, если она превысит максимум...
1 ответ
Я предполагаю, что это ограничение было введено из-за того факта, что что-либо с соотношением сторон ниже 0,5 и выше 2,5 (примерно) будет непрактичным или неприятным для использования, так как оно занимает место на экране, и пользователь должен иметь возможность провести пальцем / нажмите на него.
Например, если бы вам было позволено установить соотношение сторон 0,01, его ширина была бы 1 пикселем, и для пользователя было бы буквально невозможно взаимодействовать с представлением.