Flutter: Disabling Android System Back Button
October 14, 2021
October 27, 2021
October 27, 2021
October 27, 2021
There might be cases where you want to programmatically disable the Android system back button on some specific screens in a Flutter application. This article shows you how to do it.
Table of Contents
What Is The Point?
To prevent the Android back button from doing its job on a screen, what we need to do is to wrap this screen within a WillPopScope widget and set the onWillPop parameter like this: Advertisements
For more clarity, please see the complete example below.
Example
App Preview
The demo app we are going to make contains 2 pages: HomePage and OtherPage. You can use the button on HomePage to navigate to OtherPage. The Android system back button is disabled so you won’t go back to HomePage when you press it. Instead, a snack bar will show up and bring a message.
Here’s how it works:
The Complete Code
Conclusion
We’ve examined a full example of using the WillPopScope widget to prevent the user from using the Android system back button on a specific screen. If you’d like to learn more modern stuff in Flutter and mobile development, take a look at the following articles:
References
You can find more information about the WIllPopScope widget and Android navigation principles in the official documentation:
Источник
Как отключить кнопку Android?
Я создал макет, который содержит две кнопки, Next и Previous. Между кнопками я генерирую некоторые динамические представления. Поэтому, когда я впервые запускаю приложение, я хочу отключить кнопку «Назад», так как предыдущих просмотров не будет. Я также хочу отключить кнопку «Далее», когда больше нет просмотров для отображения. Есть ли вообще отключить кнопки?
Ты пробовал это?
Обновление: спасибо Гвен. Почти забыл, что android:clickable можно установить в макете XML, чтобы определить, можно ли нажимать кнопку или нет.
Вы не можете включить или отключить его в своем XML (так как ваш макет установлен во время выполнения), но вы можете установить, если он активируется при запуске действия с android:clickable .
Вы просто пишете одну строку кода в своей деятельности
Когда вы хотите включить ту же кнопку просто напишите
Да, это можно отключить в XML, просто используя:
В Java, если у вас есть ссылка на кнопку:
Чтобы включить / отключить кнопку, вы можете использовать:
Поскольку вы хотите отключить кнопку с самого начала, вы можете использовать button.setEnabled (false); в методе onCreate. В противном случае из XML вы можете напрямую использовать:
работает нормально и включает и отключает кнопку как надо. Но как только состояние кнопки становится отключенным, оно больше никогда не возвращается в включенное состояние, хотя оно и активируется. Я пытался сделать недействительным и обновить состояние рисования, но безуспешно.
Если у вас или у кого-то возникла похожая проблема, то для меня лучше всего установить фон для рисования. Работает на любом уровне API.
В Kotlin, если вы ссылаетесь на представление кнопок с идентификатором, включите / отключите кнопку как
layout.xml
activity.kt
сначала в xml сделать кнопку как android:clickable=»false»
затем в вашем коде, внутри oncreate() метода установите свойство кнопки как
затем внутри кнопки нажмите изменить код в
НЕПРАВИЛЬНЫЙ СПОСОБ В СЛУШАТЕРЕ ИСПОЛЬЗОВАТЬ ПЕРЕМЕННЫЕ ВМЕСТО ПАРАМЕТРА .
ПРАВИЛЬНО:
РЕДАКТИРОВАТЬ: В ответ на @ jeroen-bollen
является определение интерфейса для обратного вызова , которая будет вызвана , когда вид кнопки.
с определением метода
при щелчке по представлению объект класса View выполняет обратный вызов метода onClick (), отправляя как сам параметр, поэтому нулевой параметр представления не должен появляться, если он является ошибкой утверждения, это может произойти, например, когда класс объекта View был уничтожен за это время (для пример, собранный GC) или метод был подделан из-за взлома
немного о instanceof & null
JLS / 15.20.2. Оператор сравнения типов instanceof
Во время выполнения результат оператора instanceof равен true, если значение RelationalExpression не равно нулю и ссылка может быть приведена к ReferenceType без повышения ClassCastException.
В противном случае результат будет ложным .
три слова от автора
ЕСЛИ ты спрашиваешь, ПОЧЕМУ?
ЧТОБЫ ИЗБЕГАТЬ NullPointerException
Немного больше кода сэкономит ваше время на последующем отслеживании ошибок в вашем коде и уменьшит возникновение аномалий.
рассмотрим следующий пример:
Источник
Как отключить кнопку Android?
Я создал макет, который содержит две кнопки, Next и Previous. Между кнопками я генерирую некоторые динамические представления. Поэтому, когда я впервые запускаю приложение, я хочу отключить кнопку «Назад», так как предыдущих просмотров не будет. Я также хочу отключить кнопку «Далее», когда больше нет просмотров для отображения. Есть ли вообще отключить кнопки?
Ты пробовал это?
Обновление: спасибо Гвен. Почти забыл, что android:clickable можно установить в макете XML, чтобы определить, можно ли нажимать кнопку или нет.
Вы не можете включить или отключить его в своем XML (так как ваш макет установлен во время выполнения), но вы можете установить, если он активируется при запуске действия с android:clickable .
Вы просто пишете одну строку кода в своей деятельности
Когда вы хотите включить ту же кнопку просто напишите
Да, это можно отключить в XML, просто используя:
В Java, если у вас есть ссылка на кнопку:
Чтобы включить / отключить кнопку, вы можете использовать:
Поскольку вы хотите отключить кнопку с самого начала, вы можете использовать button.setEnabled (false); в методе onCreate. В противном случае из XML вы можете напрямую использовать:
работает нормально и включает и отключает кнопку как надо. Но как только состояние кнопки становится отключенным, оно больше никогда не возвращается в включенное состояние, хотя оно и активируется. Я пытался сделать недействительным и обновить состояние рисования, но безуспешно.
Если у вас или у кого-то возникла похожая проблема, то для меня лучше всего установить фон для рисования. Работает на любом уровне API.
В Kotlin, если вы ссылаетесь на представление кнопок с идентификатором, включите / отключите кнопку как
layout.xml
activity.kt
сначала в xml сделать кнопку как android:clickable=»false»
затем в вашем коде, внутри oncreate() метода установите свойство кнопки как
затем внутри кнопки нажмите изменить код в
НЕПРАВИЛЬНЫЙ СПОСОБ В СЛУШАТЕРЕ ИСПОЛЬЗОВАТЬ ПЕРЕМЕННЫЕ ВМЕСТО ПАРАМЕТРА .
ПРАВИЛЬНО:
РЕДАКТИРОВАТЬ: В ответ на @ jeroen-bollen
является определение интерфейса для обратного вызова , которая будет вызвана , когда вид кнопки.
с определением метода
при щелчке по представлению объект класса View выполняет обратный вызов метода onClick (), отправляя как сам параметр, поэтому нулевой параметр представления не должен появляться, если он является ошибкой утверждения, это может произойти, например, когда класс объекта View был уничтожен за это время (для пример, собранный GC) или метод был подделан из-за взлома
немного о instanceof & null
JLS / 15.20.2. Оператор сравнения типов instanceof
Во время выполнения результат оператора instanceof равен true, если значение RelationalExpression не равно нулю и ссылка может быть приведена к ReferenceType без повышения ClassCastException.
В противном случае результат будет ложным .
три слова от автора
ЕСЛИ ты спрашиваешь, ПОЧЕМУ?
ЧТОБЫ ИЗБЕГАТЬ NullPointerException
Немного больше кода сэкономит ваше время на последующем отслеживании ошибок в вашем коде и уменьшит возникновение аномалий.
рассмотрим следующий пример:
Источник