API Apis Android часто возвращают неправильные разрешения экрана после вращения устройстваAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 API Apis Android часто возвращают неправильные разрешения экрана после вращения устройства

Сообщение Anonymous »

Мне нужно знать размеры приложения в пикселях для целей захвата экрана. Ранее я использовал такие методы, как getRealmetrics, чтобы получить разрешение, и это работает безупречно при нормальных обстоятельствах, но недавно обнаружил (по -видимому, на версиях Android 30+), что если устройство повернуто, значения ширины и высоты, возвращаемые APIS /strong> обновление, чтобы отразить повернутое представление, но в других случаях нет. ? /code> правильно. < /p>
Например, если мое приложение имеет высоту 200 пикселей и шириной 100px в портретном режиме, вращение в ландшафт иногда обновляется до 100px высокой, шириной 200 пикселей, но просто только Как часто он будет продолжать возвращать высоту 200 пикселей, шириной 100px на неопределенный срок. По моему опыту до сих пор нет четкой причины для того, почему он иногда правильно обновляется, но в других случаях не так. Я пытался использовать getRealmetrics, а также более поздние GetCurrentWindowMetrics, где это необходимо и даже очень устарело от методов, таких как GetWidth для тестирования, но каждый возвращает одно и то же правильное или неправильное значение, синхронизируя друг с другом. (Другими словами, после каждого вращения все они либо правильны, либо неправильны, поэтому они, по -видимому, получают данные с одной и той же основы «Истина»). Учитывая, что это кажется более распространенным, если не исключительно для новых устройств, я действительно надеялся, что использование более новой GetCurrentWindowMetrics будет работать, но не удачи. Strong> пытался поиграть с Display.getRotation () и заметил, что он всегда возвращался 0, независимо от того, что я делал, так что что -то фундаментальное не установлено правильно. Это не является внешним условием гонки, так как после того, как вращение происходит правильные или неправильные значения, остаются возвращаемыми API до другого вращения, после чего примерно 50/50 о том, будет ли на этом вращении значения будут правильно обновлены. . < /p>
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.WindowManager;
import android.view.WindowMetrics;
import androidx.annotation.NonNull;

public class DisplayUtil {

private static WindowManager windowManagerInstance;

public static void getScreenDimensions() {
Display getOrient = windowManagerInstance.getDefaultDisplay();

if (VERSION.SDK_INT >= VERSION_CODES.R) {
WindowMetrics metrics = windowManagerInstance.getCurrentWindowMetrics();
} else {
DisplayMetrics metrics = new DisplayMetrics();
windowManagerInstance.getDefaultDisplay().getRealMetrics(metrics);
}
}

public static synchronized void setWindowManager(WindowManager windowManager) {
windowManagerInstance = windowManager;
}
}

< /code>
кто -нибудь еще испытывал это поведение раньше? Это ожидаемое поведение или известная ошибка как -то? Несоответствие действительно отбрасывает меня. Есть ли что -то в моем приложении, что виновато здесь?


Подробнее здесь: https://stackoverflow.com/questions/794 ... ce-rotatio
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

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

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»