Блокировка жестов смахивания назад в Android 10+ для всего экранаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Блокировка жестов смахивания назад в Android 10+ для всего экрана

Сообщение Anonymous »

Я пытаюсь отключить навигацию жестами назад в Android 10+ в своей игре (по ОЧЕНЬ веской причине). Мне нужно отключить жесты смахивания для всего экрана.
В документации Google очень расплывчато описано, как это сделать. https://developer.android.com/training/ ... enav#games
Это то, что я пробовал. getWindow().setSystemGestureExclusionRects(exclusionRects) вызывает мгновенный сбой при запуске, если я делаю это непосредственно в моем onCreate. Я получаю следующую ошибку: java.lang.IllegalStateException: представление не добавлено.
Моя вторая попытка заключалась в установке прямоугольников исключения системных жестов внутри addOnLayoutChangeListener для (единственного) представления, содержащегося в моем корневом макете. так что функция исключения жестов запускается только тогда, когда представление готово к работе. В этом примере предположим, что InitializeForView — это функция, которая возвращает допустимое представление. Все работает, кроме жестов, которые не блокируются.
Этот код, который я пробовал, по какой-то причине блокирует только жесты смахивания назад из нижней половины экрана :(
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
game = new Lockjaw(this);
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
RelativeLayout layout = new RelativeLayout(this);
layout.setFitsSystemWindows(true);
View view = initializeForView(game, config);
layout.addView(view);
setContentView(layout);
view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
int oldTop, int oldRight, int oldBottom) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
List exclusionRects = new ArrayList();
Rect visibleRect = new Rect();
v.getWindowVisibleDisplayFrame(visibleRect);
exclusionRects.add(visibleRect);
getWindow().setSystemGestureExclusionRects(exclusionRects);
}
}
});
}


Подробнее здесь: https://stackoverflow.com/questions/650 ... ire-screen
Ответить

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

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

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

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

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