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

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

Сообщение Anonymous »

Мне нужно знать размеры приложения в пикселях для целей захвата экрана. Ранее я использовал такие методы, как getRealmetrics, чтобы получить разрешение, и это работает безупречно при нормальных обстоятельствах, но недавно обнаружил (я считаю, конкретно на более новые версии Android), что, если устройство повернуто, ширина и значения высоты, возвращаемые APIS иногда обновление, чтобы отразить повернутое представление, но в других случаях нет. Ландшафт иногда обновляется до высотой до 100 пикселей шириной 200 пикселей, но так же часто он будет продолжать возвращать высоту 200 пикселей высотой 200 %, шириной 100px на неопределенный срок. По моему опыту до сих пор нет четкой причины для того, почему он иногда правильно обновляется, но в других случаях не так. Я пытался использовать getRealmetrics, а также более поздние GetCurrentWindowMetrics, где это необходимо и даже очень устарело от методов, таких как GetWidth для тестирования, но каждый возвращает одно и то же правильное или неправильное значение, синхронизируя друг с другом. (Другими словами, после каждого вращения все они либо правильны, либо неправильны, поэтому они, по -видимому, получают данные с одной и той же основы «Истина»). Учитывая, что это кажется более распространенным, если не исключительно для новых устройств, я действительно надеялся, что использование более новой getCurrentWindowMetrics будет работать, но не удачи. Внешнее условие гонки, так как один раз вращение происходит правильные или неверные значения продолжают возвращаться API до другого вращения, в этот момент примерно 50/50 о том, будет ли на этом вращении значения будут правильно обновлены. >
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»