Android Studio
Introdução a linguagem Kotlin
Beneficios do Kotlin
● Expressiva & Concisa
● Código Seguro
● Interoperável com Java
O Desenvolvimento Android usa O Kotlin em Primeiro
Lugar
fun main() {
println("Hello world!")
}
fun main() {
println("Hello world!")
}
Este código imprime Hello world!
>>> Hello world!
var altura: Int = 5
val mensagem = "Bem Vindo!"
Declaração de variáveis
Em Kotlin, especificar o tipo de dado ao declarar uma variável é opcional.
Variáveis podem ser declaradas usando val ou var.
Sintaxe:
val / var nomeDaVariavel : TipoDeDado = valorInicial
ou
val / var nomeDaVariavel = valorInicial
var idade = 19
idade = 10 // O valor da variável “idade”, foi
alterado
val pi = 3.14
pi = 22.40 // Erro de compilacao: O valor da
variavel “pi” nao pode ser alterado porque esta
Declaração de variáveis
Usamos var para declarar variáveis que ao longo do programa podem
receber outros valores, o usamos o val para variáveis cujo valor não vai
alterar ao longo do programa.
if (score < 20) {
println("Low")
} else if (score < 70)
{
println("Medium")
} else {
println("High")
}
when (x) {
0 -> endGame()
1 ->
moveNext()
2 ->
skipTurn()
}
Estrutura de decisão “if…else”
Estrutura de decisão
“when”, funciona como o
“Switch (case)” do Java
val listaDeNumeros = listOf(1, 2, 3, 4, 5)
val arrayDeNumeros = arrayOfOf(4, 5, 6)
val mapaDeNumeros = mapOf("a" to 10, "b" to 20,
"b" to 30)
Colecções
Aplicação do dia!
Dice Roller
Siga os passos da sessão
para a criação de uma
app android.
Aqui é onde iremos fazer o
design da tela do template
que escolhemos para nossa
aplicação. O design é feito
em linguagem XML ou pode
ser feito arrastando os
widgets para a tela.
Clique em “Split” para que o
editor visual possa te
apresentar o editor de
código e a tela
simultaneamente.
Preparando o Layout da
aplicação
Altere o código do layout do
layout. De
ConstraintLayout para
LinearLayout, e adicione os
atributos:
android:gravity = “center”
android:orientation =
“vertical”
O LinearLayout permite
que as views na tua tela
estejam dispostas, ou
orientadas horizontalmente
ou verticalmente em
Preparando o Layout da
aplicação
Copie imagens em
formato .PNG do teu
computador e cole em:
app/res/drawable no teu
projecto.
A pasta res/drawable, deve
conter todos os recursos
visuais que iras utilizar na
tua aplicação. (Imagens,
vectores, ícones, ilustrações,
etc.)
No nosso caso, adicionamos
imagens das 6 faces de um
Adicionando recursos
visuais à sua aplicação
Dentro da tag:
<LinearLayout
(...) >
</LinearLayout>
vamos adicionar os
elementos do nosso layout.
Criando o Layout da
aplicação
ImageView é um elemento
que nos permite definir um
espaço para imagens na tela
da aplicação.
O atributo id, refere-se ao
identificador da ImageView
que adicionamos na nossa
tela, o layout_width refere-
se a largura e o
layout_height refere-se a
altura.
O src é o caminho da
imagem que sera mostrada
no ImageView.
Adicionando uma
ImageView a nossa tela
Button é um botão, ele é
que vai receber as
interações do usuário sobre
a aplicação.
O atributo id, refere-se ao
identificador do Button que
adicionamos na nossa tela, o
layout_width refere-se a
largura e o layout_height
refere-se a altura. O text é o
texto mostrado no botão.
A largura e altura do botão foram definidas como
wrap_content, isso significa que elas irão ajustar-se ao
tamanho conteúdo presente no botão, nesse caso ao
tamanho do texto.
Adicionando um Button a
nossa tela
Layout pronto!
Se você for a rodar a aplicação, você verá o layout na tela do
teu emulador, mas ao clicar no botão, nada irá acontecer, pois
ainda não definimos as regras de negocio da aplicação, ou seja,
a resposta da aplicação ao interagir com o usuário.
Na classe MainActivity nós
vamos escrever as regras de
negocio da nossa aplicação.
Dentro do método
onCreate() {
(…)
}
vamos escrever o código
que manipula a nossa tela
mediante a acção do
utilizador sobre ela.
Definindo a regra de
negocio
Dentro da class
MainActivity e fora do
método onCreate(), vamos
criar uma classe Dado que
vai conter um array
facesDoDado com as
imagens de todas as faces
do dado, e um método
rolar() que escolhe
aleatoriamente um dos
elementos do array
facesDoDado e o retorna.
Definindo a regra de
negocio
Os elementos do array
facesDoDado são as
imagens das faces do dados
que adicionamos ao folder
drawable.
Para acedermos a uma
imagem contida no folder
drawable através do código
Kotlin, temos que seguir a
seguinte sintaxe:
R.drawable.nome_da_imagem
Definindo a regra de
negocio
O método / função rolar()
retorna um valor do tipo Int.
Para obter um numero
aleatório em um intervalo de
numeros, usamos a seguinte
sintaxe:
(numeroInicial ..
numeroFinal).random()
O método rolar() retorna
um dos elementos do array
com um índice aleatório no
intervalo de 1 a 6.
Definindo a regra de
negocio
Dentro da class
MainActivity e dentro do
método onCreate(), vamos
responder as acções do
usuário sobre o botão.
Para tal, precisamos de
chamar o método
setOnClickListener {
(...)
}
sobre o id do botão que
definimos no nosso layout
(btnRolar).
Respondendo as acções do
utilizador sobre botão
Dentro do
btnRolar.setOnClickListener
{
(...)
}
escrevemos o código das
instruções a serem seguidas
quando o utilizador clica no
botão.
Respondendo as acções do
utilizador sobre botão
Na linha 13, instanciamos a
classe Dado.
Na linha 14, através do
método
setImageResource(),
definimos uma nova
imagem para o ImageView
com id (imgDado) que
definimos no nosso layout.
A nova imagem é chamada
através do dado.rolar().
Rode a aplicação e veja o
resultado!
Respondendo as acções do
utilizador sobre botão
Código Completo da MainActivity.kt
package com.example.diceroller
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.ImageView
class MainActivity : AppCompatActivity() {
class Dado {
private val facesDoDado = arrayOf(
R.drawable.dado1,
R.drawable.dado2,
R.drawable.dado3,
R.drawable.dado4,
R.drawable.dado5,
R.drawable.dado6
)
fun rolar(): Int {
return facesDoDado[(0..5).random()]
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val btnRolar = findViewById<Button>(R.id.btnRolar)
val imgDado = findViewById<ImageView>(R.id.imgDado)
btnRolar.setOnClickListener {
val dado = Dado()
val novaFace = dado.rolar()
imgDado.setImageResource(novaFace)
}
}
Código Completo da MainActivity.kt (Comentado)
package com.example.diceroller
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.ImageView
// Classe principal da aplicação que herda de AppCompatActivity
class MainActivity : AppCompatActivity() {
// Classe interna que representa o dado com 6 imagens
class Dado {
// Array contendo os recursos das imagens das faces do dado
private val facesDoDado = arrayOf(
R.drawable.dado1, // Face 1
R.drawable.dado2, // Face 2
R.drawable.dado3, // Face 3
R.drawable.dado4, // Face 4
R.drawable.dado5, // Face 5
R.drawable.dado6 // Face 6
)
// Função que retorna uma face aleatória do dado
fun rolar(): Int {
return facesDoDado[(0..5).random()] // Escolhe uma imagem aleatória
}
}
// Método chamado ao iniciar a activity
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) // Define o layout da tela
// Referência ao botão com ID definido no layout XML
val btnRolar = findViewById<Button>(R.id.btnRolar)
// Referência à ImageView que exibirá o dado
val imgDado = findViewById<ImageView>(R.id.imgDado)
// Define ação ao clicar no botão
btnRolar.setOnClickListener {
val dado = Dado() // Cria uma instância da classe Dado

Aula_4_com_codigo_completo_comentado.pptx

  • 1.
  • 2.
    Beneficios do Kotlin ●Expressiva & Concisa ● Código Seguro ● Interoperável com Java
  • 3.
    O Desenvolvimento Androidusa O Kotlin em Primeiro Lugar
  • 4.
  • 5.
    fun main() { println("Helloworld!") } Este código imprime Hello world! >>> Hello world!
  • 6.
    var altura: Int= 5 val mensagem = "Bem Vindo!" Declaração de variáveis Em Kotlin, especificar o tipo de dado ao declarar uma variável é opcional. Variáveis podem ser declaradas usando val ou var. Sintaxe: val / var nomeDaVariavel : TipoDeDado = valorInicial ou val / var nomeDaVariavel = valorInicial
  • 7.
    var idade =19 idade = 10 // O valor da variável “idade”, foi alterado val pi = 3.14 pi = 22.40 // Erro de compilacao: O valor da variavel “pi” nao pode ser alterado porque esta Declaração de variáveis Usamos var para declarar variáveis que ao longo do programa podem receber outros valores, o usamos o val para variáveis cujo valor não vai alterar ao longo do programa.
  • 8.
    if (score <20) { println("Low") } else if (score < 70) { println("Medium") } else { println("High") } when (x) { 0 -> endGame() 1 -> moveNext() 2 -> skipTurn() } Estrutura de decisão “if…else” Estrutura de decisão “when”, funciona como o “Switch (case)” do Java
  • 9.
    val listaDeNumeros =listOf(1, 2, 3, 4, 5) val arrayDeNumeros = arrayOfOf(4, 5, 6) val mapaDeNumeros = mapOf("a" to 10, "b" to 20, "b" to 30) Colecções
  • 10.
    Aplicação do dia! DiceRoller Siga os passos da sessão para a criação de uma app android.
  • 11.
    Aqui é ondeiremos fazer o design da tela do template que escolhemos para nossa aplicação. O design é feito em linguagem XML ou pode ser feito arrastando os widgets para a tela. Clique em “Split” para que o editor visual possa te apresentar o editor de código e a tela simultaneamente. Preparando o Layout da aplicação
  • 12.
    Altere o códigodo layout do layout. De ConstraintLayout para LinearLayout, e adicione os atributos: android:gravity = “center” android:orientation = “vertical” O LinearLayout permite que as views na tua tela estejam dispostas, ou orientadas horizontalmente ou verticalmente em Preparando o Layout da aplicação
  • 13.
    Copie imagens em formato.PNG do teu computador e cole em: app/res/drawable no teu projecto. A pasta res/drawable, deve conter todos os recursos visuais que iras utilizar na tua aplicação. (Imagens, vectores, ícones, ilustrações, etc.) No nosso caso, adicionamos imagens das 6 faces de um Adicionando recursos visuais à sua aplicação
  • 14.
    Dentro da tag: <LinearLayout (...)> </LinearLayout> vamos adicionar os elementos do nosso layout. Criando o Layout da aplicação
  • 15.
    ImageView é umelemento que nos permite definir um espaço para imagens na tela da aplicação. O atributo id, refere-se ao identificador da ImageView que adicionamos na nossa tela, o layout_width refere- se a largura e o layout_height refere-se a altura. O src é o caminho da imagem que sera mostrada no ImageView. Adicionando uma ImageView a nossa tela
  • 16.
    Button é umbotão, ele é que vai receber as interações do usuário sobre a aplicação. O atributo id, refere-se ao identificador do Button que adicionamos na nossa tela, o layout_width refere-se a largura e o layout_height refere-se a altura. O text é o texto mostrado no botão. A largura e altura do botão foram definidas como wrap_content, isso significa que elas irão ajustar-se ao tamanho conteúdo presente no botão, nesse caso ao tamanho do texto. Adicionando um Button a nossa tela
  • 17.
    Layout pronto! Se vocêfor a rodar a aplicação, você verá o layout na tela do teu emulador, mas ao clicar no botão, nada irá acontecer, pois ainda não definimos as regras de negocio da aplicação, ou seja, a resposta da aplicação ao interagir com o usuário.
  • 18.
    Na classe MainActivitynós vamos escrever as regras de negocio da nossa aplicação. Dentro do método onCreate() { (…) } vamos escrever o código que manipula a nossa tela mediante a acção do utilizador sobre ela. Definindo a regra de negocio
  • 19.
    Dentro da class MainActivitye fora do método onCreate(), vamos criar uma classe Dado que vai conter um array facesDoDado com as imagens de todas as faces do dado, e um método rolar() que escolhe aleatoriamente um dos elementos do array facesDoDado e o retorna. Definindo a regra de negocio
  • 20.
    Os elementos doarray facesDoDado são as imagens das faces do dados que adicionamos ao folder drawable. Para acedermos a uma imagem contida no folder drawable através do código Kotlin, temos que seguir a seguinte sintaxe: R.drawable.nome_da_imagem Definindo a regra de negocio
  • 21.
    O método /função rolar() retorna um valor do tipo Int. Para obter um numero aleatório em um intervalo de numeros, usamos a seguinte sintaxe: (numeroInicial .. numeroFinal).random() O método rolar() retorna um dos elementos do array com um índice aleatório no intervalo de 1 a 6. Definindo a regra de negocio
  • 22.
    Dentro da class MainActivitye dentro do método onCreate(), vamos responder as acções do usuário sobre o botão. Para tal, precisamos de chamar o método setOnClickListener { (...) } sobre o id do botão que definimos no nosso layout (btnRolar). Respondendo as acções do utilizador sobre botão
  • 23.
    Dentro do btnRolar.setOnClickListener { (...) } escrevemos ocódigo das instruções a serem seguidas quando o utilizador clica no botão. Respondendo as acções do utilizador sobre botão
  • 24.
    Na linha 13,instanciamos a classe Dado. Na linha 14, através do método setImageResource(), definimos uma nova imagem para o ImageView com id (imgDado) que definimos no nosso layout. A nova imagem é chamada através do dado.rolar(). Rode a aplicação e veja o resultado! Respondendo as acções do utilizador sobre botão
  • 25.
    Código Completo daMainActivity.kt package com.example.diceroller import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Button import android.widget.ImageView class MainActivity : AppCompatActivity() { class Dado { private val facesDoDado = arrayOf( R.drawable.dado1, R.drawable.dado2, R.drawable.dado3, R.drawable.dado4, R.drawable.dado5, R.drawable.dado6 ) fun rolar(): Int { return facesDoDado[(0..5).random()] } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val btnRolar = findViewById<Button>(R.id.btnRolar) val imgDado = findViewById<ImageView>(R.id.imgDado) btnRolar.setOnClickListener { val dado = Dado() val novaFace = dado.rolar() imgDado.setImageResource(novaFace) } }
  • 26.
    Código Completo daMainActivity.kt (Comentado) package com.example.diceroller import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Button import android.widget.ImageView // Classe principal da aplicação que herda de AppCompatActivity class MainActivity : AppCompatActivity() { // Classe interna que representa o dado com 6 imagens class Dado { // Array contendo os recursos das imagens das faces do dado private val facesDoDado = arrayOf( R.drawable.dado1, // Face 1 R.drawable.dado2, // Face 2 R.drawable.dado3, // Face 3 R.drawable.dado4, // Face 4 R.drawable.dado5, // Face 5 R.drawable.dado6 // Face 6 ) // Função que retorna uma face aleatória do dado fun rolar(): Int { return facesDoDado[(0..5).random()] // Escolhe uma imagem aleatória } } // Método chamado ao iniciar a activity override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Define o layout da tela // Referência ao botão com ID definido no layout XML val btnRolar = findViewById<Button>(R.id.btnRolar) // Referência à ImageView que exibirá o dado val imgDado = findViewById<ImageView>(R.id.imgDado) // Define ação ao clicar no botão btnRolar.setOnClickListener { val dado = Dado() // Cria uma instância da classe Dado

Notas do Editor

  • #2 These are some of the key benefits that developers enjoy with Kotlin: The Kotlin language is expressive and concise, allowing you to express your ideas with less code. This reduces the amount of boilerplate code in your project. Kotlin helps you write safer code, with features that help you minimize common programming errors like NullPointerExceptions. Kotlin is 100% interoperable with Java, which means you can call Java-based code from Kotlin and vice-versa. If you already have an existing Android app in Java, you can add as little or as much Kotlin to the project as you want. Another key benefit that Kotlin offers is structured concurrency with Kotlin coroutines. They simplify background task management for everything from network calls to accessing local data, which are common for mobile apps. Kotlin has many great language features, and Kotlin is now the #4 most loved programming language according to the Stack Overflow’s 2020 Survey. Resources: Kotlin Stack Overflow Developer Survey in 2020
  • #3 How does this relate to Android development? In 2017, Google announced that Kotlin would be another officially supported language on Android. Then in 2019, Google announced that Android development would become increasingly Kotlin-first, so that new tools and libraries will first be made available in Kotlin. To further their commitment, Google and JetBrains formed the Kotlin Foundation to protect, promote, and advance the Kotlin language. Within the span of several years, Kotlin has seen rapid adoption in the Android developer ecosystem. Over 70% of the top 1000 Android apps use Kotlin and 60% of professional Android developers use Kotlin. There has never been a better time to start learning Kotlin to take advantage of the latest features on Android. On that note, let’s dive in and look at the basics of what Kotlin code looks like. Resources: Android's Kotlin-first approach
  • #4 What does everyone think this code does? [Continue to get audience participation until someone says “It prints Hello World!”.]
  • #5 Right! It prints Hello world!
  • #6 These are also valid ways to declare variables in Kotlin. What do you notice about this code? [Get some audience participation] No data type is specified. We didn’t need to specify that length is an integer or that message is a String. Kotlin supports type inference, which means you can omit the type in your code when the compiler can infer it. In this case, the Kotlin compiler can infer that length is an integer and message is a String. Type inference is a powerful feature in Kotlin and allows your code to be more concise!
  • #7 These are also valid ways to declare variables in Kotlin. What do you notice about this code? [Get some audience participation] No data type is specified. We didn’t need to specify that length is an integer or that message is a String. Kotlin supports type inference, which means you can omit the type in your code when the compiler can infer it. In this case, the Kotlin compiler can infer that length is an integer and message is a String. Type inference is a powerful feature in Kotlin and allows your code to be more concise!
  • #8 Control flow statements in Kotlin may look similar to what you’ve seen in other languages, with some differences. You can write if-else statements as shown here. If the condition within the parentheses is true, then that branch will be executed. If none of the conditions are met, then we fall into the else block. You can also use the when keyword for conditionals, similar to a switch statement in Java. In this example, when x is equal to 0, call the endGame() function. When it’s equal to 1, call moveNext(). And so on. When statements can make your code more compact, instead of creating multiple if/else branches checking the value of a variable. In Kotlin, you can also write for loops and while loops, which aren’t shown here but you can check the documentation for examples. For more info https://kotlinlang.org/docs/reference/control-flow.html https://kotlinlang.org/docs/reference/basic-syntax.html#using-conditional-expressions https://play.kotlinlang.org/byExample/02_control_flow/01_When
  • #9 The Kotlin Standard Library also offers a lot of functionality to help you manage and manipulate collections of items easily. You can create lists, sets, and maps for example. This is just a brief overview of some of the basics of Kotlin and you’ll dive into more details in the hands-on part of this session. For more info: https://kotlinlang.org/docs/reference/collections-overview.html
  • #10 I’m sure you’re eager to use your new skills in Kotlin and apply them to Android development! Stay tuned for our next session where you’ll start to build your first Android apps in Kotlin. [Insert details about time and location of Session 2 if it’s on a different day than Session 1.]
  • #17 Kotlin is a modern programming language that helps developers be more productive. It was started as a project by JetBrains in 2010 and was made open source under the Apache 2.0 license, with Kotlin 1.0 released in 2016. The language has quickly gained traction among the developer community and in industry. Kotlin is one of the fastest growing programming languages, according to GitHub. Resources: Kotlin GitHub State of the Octoverse