Создайте простое интерактивное приложение для бросания игральных костей

В этой лабораторной работе вы создадите приложение Dice Roller для Android, в котором пользователи могут нажать Button чтобы бросить игральную кость. Результат броска будет отображаться в TextView на экране.

Вы будете использовать редактор макетов в Android Studio для создания макета своего приложения, а затем напишете код Kotlin для того, что произойдет при нажатии Button .

Предпосылки

  • Как создать и запустить приложение «Hello, World!» в Android Studio.
  • Знаком с использованием TextViews и ImageViews в приложении.
  • Как изменить атрибуты TextView в редакторе макетов .
  • Как извлечь текст в строковый ресурс, чтобы упростить перевод вашего приложения и повторное использование строк.
  • Основы программирования на Kotlin, изложенные в предыдущих практикумах.

Чему вы научитесь

  • Как добавить Button в приложение Android.
  • Как добавить поведение при нажатии Button в приложении.
  • Как открыть и изменить код Activity приложения.
  • Как отобразить Toast сообщение.
  • Как обновить содержимое TextView во время работы приложения.

Что вы построите

  • Приложение Dice Roller для Android, которое имеет Button для броска игральных костей и обновляет текст на экране с результатом броска.

Что вам нужно

  • Компьютер с установленной Android Studio.

Вот как будет выглядеть приложение после завершения этой лабораторной работы.

Создать проект «Пустая деятельность»

  1. Если у вас уже есть открытый проект в Android Studio, выберите Файл > Новый > Новый проект..., чтобы открыть экран создания нового проекта .
  2. В Create New Project создайте новый проект Kotlin, используя шаблон Empty Activity .
  3. Назовите приложение «Dice Roller» и установите минимальный уровень API 19 (KitKat).

Важно: если вы не знакомы с созданием нового проекта в Android Studio, подробности см. в статье Создание и запуск вашего первого приложения для Android .

  1. Запустите новое приложение, оно должно выглядеть так.

Откройте редактор макетов.

  1. В окне проекта дважды щёлкните по файлу activity_main.xml ( app > res > layout > activity_main.xml ), чтобы открыть его. Вы увидите редактор макета , в котором в центре приложения будет только TextView «Hello World».

Далее вам нужно добавить в приложение Button . Button — это элемент пользовательского интерфейса (UI) в Android, нажав на который пользователь может выполнить действие.

В этой задаче вы добавите Button под TextView «Hello World». TextView и Button будут расположены в ConstraintLayout , который является разновидностью ViewGroup .

Если внутри ViewGroup есть Views , Views считаются дочерними элементами родительского ViewGroup . В случае вашего приложения TextView и Button будут считаться дочерними элементами родительского ConstraintLayout .

Продолжайте добавлять Button как дочерний элемент существующего ConstraintLayout в вашем приложении.

Добавить кнопку в макет

  1. Перетащите Button из палитры в представление «Дизайн» , расположив ее под TextView «Hello World».
  2. Под палитрой в дереве компонентов убедитесь, что Button и TextView перечислены в ConstraintLayout (как дочерние элементы ConstraintLayout ).
  3. Обратите внимание на ошибку, сообщающую о том, что Button не ограничена. Поскольку Button находится в ConstraintLayout , необходимо задать вертикальные и горизонтальные ограничения для её позиционирования.

Расположите кнопку

На этом этапе вы добавите вертикальное ограничение от верхней части Button до нижней части TextView . Это разместит Button под TextView .

  1. В представлении «Конструктор» нажмите и удерживайте белый круг с синей рамкой у верхнего края Button . Перетащите указатель, и стрелка последует за указателем. Отпустите, когда достигнете нижнего края TextView «Hello World». Это задаст ограничение макета, и Button переместится прямо под TextView .
  2. Посмотрите на атрибуты в правой части редактора макета .
  3. В виджете «Ограничения» обратите внимание на новое ограничение макета, которое установлено по нижнему краю TextView , Top → BottomOf textView (0dp) . (0dp) означает, что есть поле, равное 0. У вас также есть ошибка из-за отсутствия горизонтальных ограничений.
  4. Добавьте горизонтальное ограничение от левой стороны Button к левой стороне родительского ConstraintLayout .
  5. Повторите то же самое с правой стороны, соединив правый край Button с правым краем ConstraintLayout . Результат должен выглядеть так:

  1. При выделенной Button виджет ограничений должен выглядеть следующим образом. Обратите внимание на два дополнительных ограничения: Start → StartOf parent (0dp) и End → EndOf parent (0dp) . Это означает, что Button горизонтально центрирована в родительском элементе ConstraintLayout .
  1. Запустите приложение. Оно должно выглядеть как на скриншоте ниже. Вы можете нажать на Button , но пока это ничего не даст. Давайте продолжим!

Изменить текст кнопки

Вам предстоит внести еще несколько изменений в интерфейс редактора макетов .

Вместо надписи « Button » измените ее на что-то, указывающее на то, что будет делать кнопка: «Вращение».

  1. В редакторе макетов выберите Button , перейдите в раздел «Атрибуты» , измените текст на «Ручка » и нажмите клавишу Enter ( Return на Mac).

  1. В дереве компонентов рядом с Button появляется оранжевый предупреждающий треугольник. При наведении указателя мыши на треугольник появляется сообщение. Android Studio обнаружила жёстко закодированную строку («Roll») в коде вашего приложения и предлагает вместо неё использовать строковый ресурс .

Наличие жёстко закодированной строки усложнит перевод приложения на другие языки и повторное использование строк в разных частях приложения. К счастью, в Android Studio есть автоматическое решение этой проблемы.

  1. В дереве компонентов нажмите на оранжевый треугольник.

Откроется полное предупреждающее сообщение.

  1. В нижней части сообщения, в разделе «Предлагаемое исправление» , нажмите кнопку « Исправить» . (Возможно, вам потребуется прокрутить страницу вниз.)
  2. Откроется диалоговое окно «Извлечь ресурс» . Чтобы извлечь строку, нужно взять текст «Roll» и создать строковый ресурс с именем roll в strings.xml ( app > res > values > strings.xml ). Значения по умолчанию верны, поэтому нажмите «ОК» .

  1. Обратите внимание, что в разделе «Атрибуты» текстовый атрибут Button теперь имеет вид @string/roll , что ссылается на только что созданный вами ресурс.

В представлении «Дизайн» Button по-прежнему должна иметь надпись «Прокрутить ».

Стиль TextView

Текст «Hello World!» довольно мелкий, и это сообщение неактуально для вашего приложения. На этом этапе вы замените маленькое сообщение «Hello, World!» числом, отображающим результат броска, и увеличите шрифт для лучшей видимости.

  1. В редакторе дизайна выберите TextView , чтобы его атрибуты отобразились в окне Атрибуты .
  2. Измените значение textSize элемента TextView на 36sp , чтобы текст был крупным и легко читаемым. Возможно, вам придётся прокрутить страницу, чтобы найти значение textSize .

  1. Очистите атрибут «текст» элемента TextView . Вам не нужно ничего отображать в TextView , пока пользователь не бросит кубик.

Однако очень полезно видеть текст в TextView при редактировании макета и кода приложения. Для этого вы можете добавить текст в TextView , который будет виден только при предварительном просмотре макета, но не при запуске приложения.

.

  1. Выберите TextView в дереве компонентов .
  2. В разделе «Общие атрибуты» найдите атрибут «Текст» , а под ним — ещё один атрибут «Текст» со значком инструмента. Этот атрибут будет отображаться пользователю при запуске приложения. Атрибут « Текст » со значком инструмента — это атрибут «Текст инструментов», который предназначен специально для вас как разработчика.
  3. Установите текст инструментов равным «1» в TextView (чтобы представить, что вы бросили кубик и выпало 1). Значение «1» будет отображаться только в редакторе дизайна в Android Studio, но не при запуске приложения на реальном устройстве или эмуляторе.

Обратите внимание: поскольку этот текст видят только разработчики приложений, вам не нужно создавать для него строковый ресурс.

  1. Посмотрите на ваше приложение в предварительном просмотре. Отображается цифра «1».

  1. Запустите приложение. Вот как оно выглядит при запуске на эмуляторе. Цифра «1» не отображается. Это правильное поведение.

Отлично, вы закончили с изменениями макета!

У вас есть приложение с кнопкой, но при нажатии на неё ничего не происходит. Чтобы это изменить, вам нужно написать код на Kotlin, который бросает кубик и обновляет экран при нажатии кнопки.

Чтобы внести это изменение, вам нужно немного лучше понимать структуру приложения Android.

Activity представляет собой окно, в котором ваше приложение отображает свой пользовательский интерфейс. Обычно Activity занимает весь экран запущенного приложения. Каждое приложение имеет одну или несколько Activity. Первая Activity, или Activity верхнего уровня, часто называется MainActivity и определяется шаблоном проекта. Например, когда пользователь прокручивает список приложений на своём устройстве и нажимает на значок приложения «Dice Roller», система Android запускает MainActivity приложения.

В коде MainActivity вам необходимо предоставить подробную информацию о макете Activity и о том, как пользователь должен с ним взаимодействовать.

  • В приложении «Открытка к дню рождения» есть одно Activity , которое отображает поздравление с днем рождения и изображение.
  • В приложении Dice Roller есть одно Activity , которое отображает только что созданный вами макет TextView и Button .

В более сложных приложениях может быть несколько экранов и несколько видов Activity . У каждого Activity есть определённое назначение.

Например, в приложении фотогалереи у вас может быть Activity для отображения сетки фотографий, второе Activity для просмотра отдельной фотографии и третье Activity для редактирования отдельной фотографии.

Откройте файл MainActivity.kt

Вам нужно добавить код для реагирования на нажатие кнопки в MainActivity . Чтобы сделать это правильно, вам необходимо лучше понимать код MainActivity , который уже есть в вашем приложении.

  1. Найдите и откройте файл MainActivity.kt ( app > java > com.example.diceroller > MainActivity.kt ). Ниже приведено то, что вы должны увидеть. Если вы видите import... , нажмите на ... , чтобы развернуть список импортируемых файлов.
package com.example.diceroller

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
   }
}

Вам не обязательно понимать каждое слово в приведённом выше коде, но вам необходимо иметь общее представление о том, что он делает. Чем больше вы работаете с кодом Android, тем привычнее он становится и тем лучше вы его понимаете.

  1. Посмотрите на код Kotlin для класса MainActivity , который идентифицируется ключевым словом class , а затем именем.
class MainActivity : AppCompatActivity() {
    ...
}
  1. Обратите внимание, что в MainActivity нет функции main() .

    Ранее вы узнали, что в каждой программе на Kotlin должна быть функция main() . Приложения Android работают иначе. Вместо вызова функции main() система Android вызывает метод onCreate() вашего MainActivity при первом открытии приложения.
  2. Найдите метод onCreate() , который выглядит как код ниже.
   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
   }

Вы узнаете о override в следующей лабораторной работе (так что пока не беспокойтесь об этом). Остальная часть метода onCreate() настраивает MainActivity , используя код из импортируемых элементов и устанавливая начальный макет с помощью setContentView() .

  1. Обратите внимание на строки, начинающиеся с import .

Android предоставляет фреймворк из множества классов, упрощающих написание приложений для Android, но ему необходимо точно знать, какой класс вы имеете в виду. Вы можете указать, какой класс фреймворка использовать в коде, с помощью оператора import . Например, класс Button определён в android.widget.Button .

Включить автоматический импорт

При использовании большего количества классов может возникнуть проблема с добавлением операторов import . К счастью, Android Studio помогает вам выбирать правильные операторы импорта при использовании классов, предоставленных другими разработчиками. На этом этапе вы настроите Android Studio для автоматического добавления операторов импорта, когда это возможно, и автоматического удаления неиспользуемых операторов импорта из вашего кода.

  1. В Android Studio откройте настройки, выбрав Файл > Другие настройки > Настройки для новых проектов .
  2. Разверните раздел «Другие настройки» > «Автоматический импорт» . В разделах «Java» и «Kotlin» убедитесь, что установлены флажки «Добавить недвусмысленный импорт на лету» и «Оптимизировать импорт на лету (для текущего проекта)» . Обратите внимание, что в каждом разделе есть два флажка.

    Настройки однозначного импорта предписывают Android Studio автоматически добавлять оператор импорта, если она может определить, какой из них использовать. Настройки оптимизированного импорта предписывают Android Studio удалять все импорты, которые не используются в вашем коде.
  3. Сохраните изменения и закройте настройки, нажав кнопку ОК .

Теперь, когда вы немного больше знаете о MainActivity , вы измените приложение так, чтобы нажатие Button вызывало какие-либо действия на экране.

Отображать сообщение при нажатии кнопки

На этом этапе вы укажете, что при нажатии кнопки в нижней части экрана будет появляться краткое сообщение.

  1. Добавьте следующий код в метод onCreate() после вызова setContentView() . Метод findViewById() находит Button в макете. R.id.button — это идентификатор ресурса для Button , который является её уникальным идентификатором. Код сохраняет ссылку на объект Button в переменной rollButton , а не на сам объект Button .
val rollButton: Button = findViewById(R.id.button)

Код сохраняет ссылку на объект Button в переменной rollButton , а не на сам объект Button .

Метод onCreate() теперь должен выглядеть так.

override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
   setContentView(R.layout.activity_main)

   val rollButton: Button = findViewById(R.id.button)
}
  1. Убедитесь, что Android Studio автоматически добавила оператор import для Button .
    Обратите внимание, что теперь есть три оператора импорта — третий был добавлен автоматически.
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button

Далее вам нужно связать код с Button , чтобы он мог выполняться при нажатии на Button . Обработчик щелчков — это код, определяющий действия при нажатии или щелчке. Его можно представить как код, который просто «ожидает», когда пользователь нажмёт, в данном случае, на Button .

  1. Используйте объект rollButton и установите для него прослушиватель щелчков, вызвав метод setOnClickListener() .
rollButton.setOnClickListener {
}


По мере ввода текста Android Studio может показывать несколько вариантов. В этом случае выберите параметр setOnClickListener {...} .

В фигурных скобках вы указываете, что должно произойти при нажатии кнопки. На данный момент ваше приложение будет отображать Toast — краткое сообщение, которое будет показано пользователю.

  1. Создайте Toast с текстом "Dice Rolled!" , вызвав Toast.makeText() .
val toast = Toast.makeText(this, "Dice Rolled!", Toast.LENGTH_SHORT)
  1. Затем сообщите Toast , чтобы он отобразился, вызвав метод show() .
toast.show()

Вот как выглядит обновленный класс MainActivity ; операторы package и import по-прежнему находятся в верхней части файла:

class MainActivity : AppCompatActivity() {

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)

       val rollButton: Button = findViewById(R.id.button)
       rollButton.setOnClickListener {
           val toast = Toast.makeText(this, "Dice Rolled!", Toast.LENGTH_SHORT)
           toast.show()
       }
   }
}

Вы можете объединить две строки в обработчике щелчков в одну без переменной. Это распространённый шаблон, который вы можете встретить в другом коде.

Toast.makeText(this, "Dice Rolled!", Toast.LENGTH_SHORT).show()
  1. Запустите приложение и нажмите кнопку «Прокрутить» . В нижней части экрана появится всплывающее сообщение, которое через некоторое время исчезнет.

Ура! Нажатие кнопки вызвало появление сообщения! Вы впервые написали код на Kotlin для Android!

Обновлять TextView при нажатии кнопки

Вместо отображения временного Toast сообщения вы напишете код для обновления TextView на экране при нажатии кнопки «Прокрутить» .

  1. Вернитесь к activity_main.xml ( app > res > layout >activity_main.xml )
  2. Щелкните по TextView .
  3. Обратите внимание, что идентификаторtextView .
  4. Откройте MainActivity.kt ( app > java > com.example.diceroller > MainActivity.kt )
  5. Удалите строки кода, которые создают и отображают Toast .
rollButton.setOnClickListener {
  
}
  1. Вместо них создайте новую переменную с именем resultTextView для хранения TextView .
  2. Используйте findViewById() чтобы найти textView в макете по его идентификатору и сохранить ссылку на него.
val resultTextView: TextView = findViewById(R.id.textView)
  1. Установите текст в resultTextView равным «6» в кавычках.
resultTextView.text = "6"

Это похоже на то, что вы сделали, задав текст в Attributes , но теперь он находится в вашем коде, поэтому текст должен быть заключен в двойные кавычки. Если вы укажете это явно, TextView на данный момент всегда будет отображать 6. Код для броска кубика и отображения разных значений вы добавите в следующей задаче.

Вот как должен выглядеть класс MainActivity :

class MainActivity : AppCompatActivity() {

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)

       val rollButton: Button = findViewById(R.id.button)
       rollButton.setOnClickListener {
           val resultTextView: TextView = findViewById(R.id.textView)
           resultTextView.text = "6"
       }
   }
}
  1. Запустите приложение. Нажмите кнопку. Значение TextView должно обновиться до «6».

Единственное, чего не хватает, — это самого броска кубика. Вы можете повторно использовать класс Dice из предыдущей лабораторной работы, который реализует логику броска кубика.

Добавьте класс Dice

  1. После последней фигурной скобки в классе MainActivity создайте класс Dice с методом roll() .
class Dice(val numSides: Int) {

   fun roll(): Int {
       return (1..numSides).random()
   }
}
  1. Обратите внимание, что Android Studio подчеркивает numSides волнистой серой линией. (Это может занять некоторое время.)
  2. Наведите указатель мыши на numSides , и появится всплывающее окно с сообщением о том, что свойство «numSides» может быть закрытым .

Если обозначить numSides как private он будет доступен только внутри класса Dice . Поскольку единственный код, использующий numSides , находится внутри класса Dice , этот аргумент можно сделать private для класса Dice . Подробнее о private и public переменных вы узнаете в следующем модуле.

  1. Продолжайте и примените предложенное исправление из Android Studio, нажав «Сделать 'numSides' 'private'» .

Создайте метод rollDice()

Теперь, когда вы добавили класс Dice в своё приложение, обновите MainActivity для его использования. Чтобы лучше организовать код, объедините всю логику броска игральной кости в одну функцию.

  1. Замените код в прослушивателе щелчков, который устанавливает текст равным «6», на вызов rollDice() .
rollButton.setOnClickListener {
   rollDice()
}
  1. Поскольку rollDice() еще не определен, Android Studio сообщает об ошибке и отображает rollDice() красным цветом.
  2. Если навести указатель мыши на rollDice() , Android Studio отобразит проблему и некоторые возможные решения.

  1. Нажмите «Дополнительные действия...» , чтобы открыть меню. Android Studio предлагает вам выполнить ещё больше работы!

  1. Выберите Создать функцию 'rollDice' . Android Studio создаст пустое определение для функции внутри MainActivity .
private fun rollDice() {
    TODO("Not yet implemented")
}

Создать новый экземпляр объекта Dice

На этом этапе вы заставите метод rollDice() создать и бросить игральную кость, а затем отобразите результат в TextView .

  1. Внутри rollDice() удалите вызов TODO() .
  2. Добавьте код для создания игральной кости с 6 гранями.
val dice = Dice(6)
  1. Бросьте кости, вызвав метод roll() , и сохраните результат в переменной diceRoll .
val diceRoll = dice.roll()
  1. Найдите TextView , вызвав findViewById() .
val resultTextView: TextView = findViewById(R.id.textView)

Переменная diceRoll — это число, но TextView использует текст. Вы можете преобразовать его в строку с помощью метода toString() объекта diceRoll .

  1. Преобразуйте diceRoll в строку и используйте ее для обновления текста resultTextView .
resultTextView.text = diceRoll.toString()

Вот как выглядит метод rollDice() :

private fun rollDice() {
    val dice = Dice(6)
    val diceRoll = dice.roll()
    val resultTextView: TextView = findViewById(R.id.textView)
    resultTextView.text = diceRoll.toString()
}
  1. Запустите приложение. Результат броска кубика должен измениться на другие значения, кроме 6! Поскольку это случайное число от 1 до 6, иногда может появляться и значение 6.

Ура, вы молодцы!

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

Эти привычки соблюдают профессиональные разработчики Android при написании своего кода.

Руководство по стилю Android

Работая в команде, желательно, чтобы участники писали код схожим образом, обеспечивая единообразие. Именно поэтому для Android существует руководство по стилю написания кода для Android, которое содержит рекомендации по соглашениям об именовании, форматированию и другим полезным практикам. Следуйте этим рекомендациям при написании кода для Android: Kotlin Style Guide for Android Developers .

Ниже приведено несколько способов соблюдения руководства по стилю.

Очистите свой код

Сократите свой код

Вы можете сделать свой код более лаконичным, сократив его до меньшего количества строк. Например, вот код, который устанавливает прослушиватель щелчков на Button .

rollButton.setOnClickListener {
    rollDice()
}

Поскольку инструкции для прослушивателя щелчков занимают всего одну строку, вы можете объединить вызов метода rollDice() и фигурные скобки в одну. Вот как это выглядит. Одна строка вместо трёх!

rollButton.setOnClickListener { rollDice() }

Переформатируйте свой код

Теперь вам нужно переформатировать свой код, чтобы он соответствовал рекомендуемым соглашениям по форматированию кода для Android.

  1. В классе MainActivity.kt выделите весь текст в файле сочетанием клавиш Control+A в Windows (или Command+A на Mac). Или можно воспользоваться меню Android Studio «Правка» > «Выделить всё» .
  2. Выделив весь текст в файле, перейдите в меню Android Studio «Код» > «Переформатировать код» или используйте сочетание клавиш Ctrl+Alt+L (или Command+Option+L на Mac).

Это обновит форматирование вашего кода, включая пробелы, отступы и т. д. Возможно, вы не увидите никаких изменений, и это хорошо. Ваш код уже был правильно отформатирован!

Прокомментируйте свой код

Добавьте комментарии к коду, чтобы описать, что происходит в написанном вами коде. По мере усложнения кода важно также отметить, почему он работает именно так. Если вы вернётесь к коду позже, чтобы внести изменения, его назначение может быть по-прежнему понятно, но вы можете забыть, почему вы написали его именно так.

Обычно комментарий добавляется для каждого класса (в вашем приложении есть только MainActivity и Dice ) и каждого метода. Используйте символы /** и **/ в начале и конце комментария, чтобы сообщить системе, что это не код. Эти строки будут проигнорированы при выполнении кода системой.

Пример комментария к классу:

/**
* This activity allows the user to roll a dice and view the result
* on the screen.
*/
class MainActivity : AppCompatActivity() {

Пример комментария к методу:

/**
* Roll the dice and update the screen with the result.
*/
private fun rollDice() {

Внутри метода вы можете добавлять комментарии, если это будет полезно для читателя вашего кода. Помните, что вы можете использовать символ // в начале комментария. Всё, что находится после символа // в строке, считается комментарием.

Пример 2 комментариев внутри метода:

private fun rollDice() {
   // Create new Dice object with 6 sides and roll it
   val dice = Dice(6)
   val diceRoll = dice.roll()

   // Update the screen with the dice roll
   val resultTextView: TextView = findViewById(R.id.textView)
   resultTextView.text = diceRoll.toString()
}
  1. Уделите немного времени добавлению комментариев в свой код.
  2. После всех этих изменений в комментариях и форматировании рекомендуется еще раз запустить приложение, чтобы убедиться, что оно по-прежнему работает так, как и ожидалось.

Посмотрите код решения, чтобы узнать, как можно прокомментировать свой код.

Код решения для этой лабораторной работы находится в проекте и модуле, показанных ниже.

Чтобы получить код для этой лабораторной работы с GitHub и открыть его в Android Studio, выполните следующие действия.

  1. Запустите Android Studio.
  2. В окне «Добро пожаловать в Android Studio» нажмите Извлечь проект из системы управления версиями .
  3. Выберите Git .

  1. В диалоговом окне «Клонировать репозиторий» вставьте предоставленный URL-адрес кода в поле URL .
  2. Нажмите кнопку «Тест» , подождите и убедитесь, что появилось зеленое всплывающее окно с сообщением «Подключение успешно установлено» .
  3. При желании можно изменить каталог на какой-либо другой, отличный от предлагаемого по умолчанию.

  1. Нажмите «Клонировать» . Android Studio начнет загрузку вашего кода.
  2. В всплывающем окне «Извлечь из системы контроля версий» нажмите кнопку Да .

  1. Подождите, пока откроется Android Studio.
  2. Выберите правильный модуль для вашего начального кода лабораторной работы или кода решения.

  1. Нажмите кнопку «Выполнить». для сборки и запуска вашего кода.
  • Добавьте Button в приложение Android с помощью редактора макетов .
  • Измените класс MainActivity.kt , чтобы добавить в приложение интерактивное поведение.
  • Toast сообщение как временное решение для подтверждения того, что вы на правильном пути.
  • Установите прослушиватель событий при нажатии Button с помощью setOnClickListener() чтобы добавить поведение при нажатии Button .
  • Когда приложение запущено, вы можете обновить экран, вызывая методы TextView , Button или других элементов пользовательского интерфейса в макете.
  • Оставляйте комментарии к своему коду, чтобы помочь другим людям, читающим его, понять ваш подход.
  • Переформатируйте и очистите свой код.

Сделайте следующее:

  1. Добавьте ещё один кубик в приложение. Нажатие кнопки «Бросить» должно бросить два кубика. Результаты должны отображаться в двух разных TextViews на экране.

Проверьте свою работу:

Ваше готовое приложение должно работать без ошибок и отображать два кубика в приложении.