Практический урок Kotlin в Android Studio: ProgressBar

Когда приложение загружает данные из интернета или выполняет сложную задачу, пользователь не должен гадать, работает ли программа или зависла. Для этого используются индикаторы загрузки — полоски и крутящиеся колёса, которые показывают, что процесс продолжается. Сегодня в Android Studio мы создадим небольшое приложение с прогресс-баром на языке Kotlin. Этот урок предоставит вам готовый шаблон, который можно легко внедрить в любой проект.


Два вида ProgressBar

В Android есть два основных типа индикаторов. Первый — круговой (спиннер), который просто крутится, не показывая процент выполнения. Второй — горизонтальный, который заполняется слева направо по мере завершения задачи. Выбор зависит от сценария: если точное время ожидания неизвестно, лучше использовать спиннер. Если известно — горизонтальную полоску.


Добавляем ProgressBar в разметку

Откройте activity_main.xml в режиме Design. В палитре найдите ProgressBar и перетащите его на экран. По умолчанию это круговой индикатор. Рядом разместите кнопку с текстом «Загрузить» и текстовую метку для статуса. Кнопке задайте id loadButton, метке — statusText, прогресс-бару — progressBar.

Чтобы получить горизонтальный индикатор, добавьте в XML-коде стиль:

<ProgressBar
    android:id="@+id/progressBar"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:max="100" />

Атрибут android:max задаёт максимальное значение прогресса. Для процентов удобно использовать 100, чтобы сразу получать готовый процент.


Меняем прогресс из кода

В MainActivity.kt найдём элементы по id и пропишем логику. При нажатии на кнопку запустим имитацию загрузки: будем увеличивать прогресс от 0 до 100 с небольшой задержкой. Для этого используем корутину, которая каждые 100 миллисекунд обновляет значение.

val progressBar = findViewById<ProgressBar>(R.id.progressBar)
val statusText = findViewById<TextView>(R.id.statusText)
val loadButton = findViewById<Button>(R.id.loadButton)

loadButton.setOnClickListener {
    loadButton.isEnabled = false
    lifecycleScope.launch {
        for (i in 0..100) {
            progressBar.progress = i
            statusText.text = "Загружено $i%"
            delay(100)
        }
        statusText.text = "Готово!"
        loadButton.isEnabled = true
    }
}

Кнопка блокируется на время загрузки, чтобы пользователь не запустил несколько операций одновременно. Корутина позволяет обновлять интерфейс плавно, без зависаний.


Как показать и спрятать индикатор

После завершения загрузки горизонтальный прогресс-бар можно скрыть. Для этого меняем свойство visibility на View.GONE. В начале загрузки, наоборот, показываем его снова.

progressBar.visibility = View.GONE   // скрыть
progressBar.visibility = View.VISIBLE // показать

Это делает интерфейс чище: когда загрузки нет, индикатор не занимает место на экране.


Круговой индикатор и неопределённый прогресс

Если вы оставили стандартный круговой ProgressBar, ему не нужны значения — он крутится сам. Для остановки достаточно скрыть его. Такой индикатор хорош для сетевых запросов, когда неизвестно, сколько времени займёт ответ сервера.

// перед запросом
progressBar.visibility = View.VISIBLE

// после получения ответа
progressBar.visibility = View.GONE

Несколько простых рекомендаций

  • Всегда показывайте индикатор при длительных операциях. Если приложение «задумалось» без обратной связи, пользователь закроет его через пару секунд.
  • Блокируйте повторные действия. Отключайте кнопку на время загрузки, чтобы избежать дублирования запросов.
  • Используйте корутины. Обновление прогресса должно происходить асинхронно, иначе интерфейс зависнет.

Чему мы научились

Сегодняшний практический урок в среде Android Studio на языке Kotlin показал, как добавить в приложение индикатор загрузки. Вы научились создавать горизонтальный и круговой ProgressBar, управлять их видимостью и обновлять прогресс в корутине. Теперь любая длительная операция в вашем приложении будет выглядеть профессионально, а пользователь всегда будет знать, что программа работает. Попробуйте добавить прогресс-бар при загрузке данных из сети — это естественный следующий шаг.