Este codelab faz parte do curso Conceitos básicos do Kotlin para Android. Você aproveitará mais o curso se fizer os codelabs em sequência. Todos os codelabs do curso estão listados na página de destino dos codelabs do curso Conceitos básicos do Kotlin para Android.
O que você já precisa saber
- Como criar um app Android básico em Kotlin.
- Executar um app Android em um emulador ou dispositivo.
- Como criar um layout linear usando o Layout Editor do Android Studio .
- Como criar um app simples que usa
LinearLayout
,TextView
,ScrollView
e um botão com um gerenciador de cliques.
O que você vai aprender
- Como conseguir entrada do usuário usando uma visualização
EditText
. - Como definir o texto como uma visualização
TextView
usando o texto da visualizaçãoEditText
. - Como trabalhar com
View
eViewGroup
. - Como mudar a visibilidade de uma
View
.
Atividades do laboratório
- Adicione interatividade ao app AboutMe, que é de um codelab anterior.
- Adicione um
EditText
para que o usuário possa inserir texto. - Adicione um
Button
e implemente o gerenciador de cliques dele.
Neste codelab, você ampliará o app AboutMe para adicionar interações do usuário. Adicione um campo de apelido, um botão CONCLUÍDO e uma visualização de texto para exibir o apelido. Quando o usuário digita um apelido e toca no botão CONCLUÍDO, a visualização de texto é atualizada para mostrar o apelido inserido. O usuário pode atualizar o apelido tocando na visualização de texto.
Nesta tarefa, você adicionará um campo de entrada EditText
para permitir que o usuário digite um apelido.
Etapa 1: primeiros passos
- Se você ainda não tiver o appAboutMe de um codelab anterior, faça o download do código inicial, AboutMeInteractive-Starter. Esse é o mesmo código que você terminou em um codelab anterior.
- Abra o projeto aboutMeInteractive-Starter no Android Studio.
- Execute o app. Você verá uma visualização de texto com um nome, uma imagem de estrela e um trecho longo de texto em uma visualização de rolagem.
Observe que o usuário não consegue mudar o texto.
Apps serão mais interessantes se o usuário puder interagir com o app, por exemplo, se ele puder inserir texto. Para aceitar a entrada de texto, o Android fornece um widget de interface do usuário (IU) chamado texto de edição. Defina um texto de edição usando EditText
, uma subclasse de TextView
. O texto de edição permite que o usuário insira e modifique a entrada de texto, conforme mostrado na captura de tela abaixo.
Etapa 2: adicionar um EditText
- No Android Studio, abra o arquivo de layout
activity_main.xml
na guia Design. - No painel Palette, clique em Text.
Ab TextView, que é umaTextView
, será exibida na parte superior da lista de elementos de texto do painel Palette. Abaixo de Ab TextView, há várias visualizaçõesEditText
.
No painel Palette, observe como o ícone paraTextView
mostra as letras Ab sem sublinhamento. Os íconesEditText
, no entanto, mostram Ab sublinhado. O sublinhamento indica que a visualização é editável.
Para cada visualizaçãoEditText
, o Android define atributos diferentes, e o sistema exibe o método de entrada simples adequado (como um teclado na tela). - Arraste um texto de edição de PlainText para a Component Tree e coloque-o abaixo de
name_text
e acima destar_image
. - Use o painel Attributes para definir os seguintes atributos na visualização
EditText
.
Atributo | Valor |
|
|
|
|
|
|
- Execute o app. Você verá um texto de edição acima do texto padrão "Nome".
Nesta tarefa, você estilizará a visualização EditText
adicionando uma dica, mudando o alinhamento do texto, mudando o estilo para NameStyle
e definindo o tipo de entrada.
Etapa 1: adicionar texto de dica
- Adicione um novo recurso de string para a dica no arquivo
string.xml
.
<string name="what_is_your_nickname">What is your Nickname?</string>
- Use o painel Attributes para definir os seguintes atributos com a visualização
EditText
:
Atributo | Valor |
|
|
| (ao centro) |
|
|
- No painel Attributes, remova o valor
Name
do atributotext
. O valor do atributotext
precisa estar vazio para que a dica seja exibida.
Etapa 2: definir o atributo inputType
O atributo inputType
especifica o tipo de entrada que os usuários podem inserir na visualização EditText
. O sistema Android exibirá o campo de entrada e o teclado na tela apropriados, dependendo do tipo de entrada definido.
Para ver todos os tipos de entrada possíveis, no painel Attributes, clique no campo inputType
ou clique nos três pontos ... ao lado dele. Será aberta uma lista que mostra todos os tipos de entrada que você pode usar, com o tipo ativo no momento marcado. Você pode selecionar mais de um tipo de entrada.
Por exemplo, para senhas, use o valor textPassword
. O campo de texto oculta a entrada do usuário.
Para números de telefone, use o valor phone
. Um teclado numérico será exibido, e o usuário poderá inserir somente números.
Defina o tipo de entrada para o campo de apelido:
- Defina o atributo
inputType
comotextPersonName
para o texto de ediçãonickname_edit
. - No painel Component Tree, observe um aviso
autoFillHints
. Este aviso não se aplica a este app e está fora do escopo deste codelab, portanto, você pode ignorá-lo. Se quiser saber mais sobre o preenchimento automático, consulte Otimizar seu app para o preenchimento automático. - No painel Attributes, verifique os valores dos seguintes atributos da visualização
EditText
:
Atributo | Valor |
|
|
|
|
|
|
|
|
|
|
|
|
| (vazio) |
Uma Button
é um elemento de IU em que o usuário pode tocar para realizar uma ação. Um botão pode ser formado por texto, um ícone ou ambos.
Nesta tarefa, você adicionará o botão CONCLUÍDO, em que o usuário tocará depois de digitar o apelido. O botão substitui a visualização EditText
por uma visualização TextView
que exibe o apelido. Para atualizar o apelido, o usuário pode tocar na visualização TextView
.
Etapa 1: adicionar um botão CONCLUÍDO
- Arraste um botão do painel Palette para a Component Tree. Posicione o botão abaixo do texto de edição
nickname_edit
. - Crie um novo recurso de string chamado
done
. Dê à string um valor deDone
.
<string name="done">Done</string>
- Use o painel Attributes para definir os seguintes atributos na visualização
Button
adicionada recentemente:
Atributo | Valores |
|
|
|
|
|
|
|
|
O atributo layout_gravity
centraliza a visualização no layout pai, LinearLayout
.
- Mude o estilo para
Widget.AppCompat.Button.Colored
, que é um dos estilos predefinidos fornecidos pelo Android. Você pode selecionar o estilo na lista suspensa ou na janela Recursos.
Esse estilo altera a cor do botão para a cor de destaque,colorAccent
. A cor de destaque é definida no arquivores/values/colors.xml
.
O arquivo colors.xml
contém as cores padrão do app. Você pode adicionar novos recursos de cor ou mudar os recursos de cor existentes no projeto, com base nos requisitos do app.
Arquivo colors.xml
de amostra:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#008577</color>
<color name="colorPrimaryDark">#00574B</color>
<color name="colorAccent">#D81B60</color>
</resources>
Etapa 2: definir o estilo do botão CONCLUÍDO
- No painel Attributes, adicione uma margem superior selecionando Layout_Margin > Top. Defina a margem superior como
layout_margin
, que é definida no arquivodimens.xml
. - Defina o atributo
fontFamily
comoroboto
no menu suspenso. - Acesse a guia Text e verifique o código XML gerado para o botão recém-adicionado.
<Button
android:id="@+id/done_button"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/layout_margin"
android:fontFamily="@font/roboto"
android:text="@string/done" />
Etapa 3: mudar o recurso de cores
Nesta etapa, você mudará a cor de destaque do botão para corresponder à barra de apps da sua atividade.
- Abra
res/values/colors.xml
e mude o valor decolorAccent
para#76bf5e
.
<color name="colorAccent">#76bf5e</color>
É possível ver a cor correspondente ao código HEX, na margem esquerda do editor de arquivos.
Observe a mudança na cor do botão no editor de design.
- Execute o app. Você verá um botão CONCLUÍDO abaixo do texto de edição.
Depois que o usuário digita um apelido e toca no botão CONCLUÍDO, o apelido é exibido em uma visualização TextView
. Nesta tarefa, você adicionará uma visualização de texto com um plano de fundo colorido. A visualização de texto exibe o apelido do usuário acima do star_image
.
Etapa 1: adicionar uma TextView ao apelido
- Arraste uma visualização de texto do painel Palette para a Component Tree. Coloque a visualização de texto abaixo do
done_button
e acima dostar_image
. - Use o painel Attributes para definir os seguintes atributos para a nova visualização
TextView
:
Atributo | Valor |
|
|
|
|
| (centro) |
Etapa 2: mudar a visibilidade da TextView
É possível exibir ou ocultar visualizações no app usando o atributo visibility
. Esse atributo tem um destes três valores:
visible
: a visualização está visível.Invisible
: oculta a visualização, mas ela ainda ocupa espaço no layout.gone
: oculta a visualização, que não ocupa espaço no layout.
- No painel Attributes, defina a
visibility
da visualização de textonickname_text
comogone
, porque você não quer que o app mostre essa visualização de texto no início.
Ao mudar o atributo no painel Attributes, a visualizaçãonickname_text
desaparece do editor de design. A visualização fica oculta na visualização do layout. - Mude o valor do atributo
text
da visualizaçãonickname_text
para uma string vazia.
O código XML gerado para essa TextView
será semelhante a este:
<TextView
android:id="@+id/nickname_text"
style="@style/NameStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:visibility="gone"
android:text="" />
A visualização do layout será parecida com esta:
Um gerenciador de cliques no objeto Button
(ou em qualquer visualização) especifica a ação a ser realizada quando o botão (visualização) é tocado. A função que processa o evento de clique precisa ser implementada na Activity
que hospeda o layout com o botão (visualização).
Geralmente, o listener de clique tem esse formato, em que o valor transmitido é a visualização que recebeu o clique ou o toque.
private fun clickHandlerFunction(viewThatIsClicked: View) {
// Add code to perform the button click event
}
Há duas maneiras de anexar a função listener de cliques aos eventos de clique no botão:
- No layout XML, você pode adicionar o atributo
android:onClick
ao elemento<Button>
. Exemplo:
<Button
android:id="@+id/done_button"
android:text="@string/done"
...
android:onClick="clickHandlerFunction"/>
OU
- É possível fazer isso de forma programática no momento da execução, em
onCreate()
doActivity
, chamandosetOnClickListener
. Exemplo:
myButton.setOnClickListener {
clickHanderFunction(it)
}
Nesta tarefa, você vai adicionar um listener de clique ao done_button
de forma programática. Adicione o listener de clique à atividade correspondente, que é MainActivity.kt
.
A função de listener de cliques, chamada addNickname
, fará o seguinte:
- Consiga o texto do texto de edição de
nickname_edit
. - Defina o texto na visualização de texto
nickname_text
. - Ocultar o texto e o botão de edição
- Mostre o apelido
TextView
.
Etapa 1: adicionar um listener de clique
- No Android Studio, na pasta
java
, abra o arquivoMainActivity.kt
. - No
MainActivity.kt
, na classeMainActivity
, adicione uma função com o nomeaddNickname
. Inclua um parâmetro de entrada com o nomeview
do tipoView
. O parâmetroview
é oView
em que a função é chamada. Nesse caso,view
será uma instância do botão CONCLUÍDO.
private fun addNickname(view: View) {
}
- Na função
addNickname
, usefindViewById()
para ver uma referência ao texto de ediçãonickname_edit
e à visualização de textonickname_text
.
val editText = findViewById<EditText>(R.id.nickname_edit)
val nicknameTextView = findViewById<TextView>(R.id.nickname_text)
- Defina o texto na visualização de texto do
nicknameTextView
como o texto digitado pelo usuário noeditText
, usando a propriedadetext
.
nicknameTextView.text = editText.text
- Para ocultar a visualização do apelido
EditText
, defina a propriedadevisibility
comoeditText
comoView.GONE
.
Em uma tarefa anterior, você alterou a propriedade visibility
usando o Layout Editor. Aqui, você faz a mesma coisa de forma programática.
editText.visibility = View.GONE
- Para ocultar o botão CONCLUÍDO, defina a propriedade
visibility
comoView.GONE
. Você já tem a referência do botão como o parâmetro de entrada da função,view
.
view.visibility = View.GONE
- No final da função
addNickname
, torne oTextView
visível para o apelido definindo a propriedadevisibility
comoView.VISIBLE
.
nicknameTextView.visibility = View.VISIBLE
Etapa 2: anexar o listener de clique ao botão "DONE"
Agora que você tem uma função que define a ação a ser realizada quando o usuário toca no botão DONE, é necessário anexá-la à visualização Button
.
- Em
MainActivity.kt
, no final da funçãoonCreate()
, acesse uma referência à visualização DONEButton
. Use a funçãofindViewById()
e chamesetOnClickListener
. Transmita uma referência para a função de detecção de cliques,addNickname()
.
findViewById<Button>(R.id.done_button).setOnClickListener {
addNickname(it)
}
No código acima, it
refere-se à done_button
, que é a visualização transmitida como argumento.
- Execute o app, digite um apelido e toque no botão CONCLUÍDO. Observe como o texto de edição e o botão são substituídos pela visualização de texto de apelido.
Mesmo após o usuário tocar no botão CONCLUÍDO, o teclado ainda estará visível. Esse comportamento é o padrão.
Etapa 3: ocultar o teclado
Nesta etapa, você adicionará código para ocultar o teclado depois que o usuário tocar no botão CONCLUÍDO.
- No
MainActivity.kt
, no final da funçãoaddNickname()
, adicione o seguinte código. Se quiser mais informações sobre esse código, consulte a documentação dohideSoftInputFromWindow
.
// Hide the keyboard.
val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
- Execute o app novamente. Depois de tocar em CONCLUÍDO, o teclado ficará oculto.
Não é possível alterar o apelido depois que o usuário toca no botão CONCLUÍDO. Na próxima tarefa, você vai tornar o app mais interativo e adicionar funcionalidades para que o usuário possa atualizar o apelido.
Nesta tarefa, você adicionará um listener de clique à visualização de texto do apelido. O listener de clique oculta a visualização de texto do apelido, mostra o texto da edição e mostra o botão CONCLUÍDO.
Etapa 1: adicionar um listener de clique
- No
MainActivity
, adicione uma função de listener de cliques chamadaupdateNickname(view: View)
para a visualização de texto do apelido.
private fun updateNickname (view: View) {
}
- Na função
updateNickname
, acesse uma referência ao texto de ediçãonickname_edit
e ao botão CONCLUÍDO. Para fazer isso, use o métodofindViewById()
.
val editText = findViewById<EditText>(R.id.nickname_edit)
val doneButton = findViewById<Button>(R.id.done_button)
- No final da função
updateNickname
, adicione o código para mostrar o texto de edição, mostre o botão CONCLUÍDO e oculte a visualização de texto.
editText.visibility = View.VISIBLE
doneButton.visibility = View.VISIBLE
view.visibility = View.GONE
- No
MainActivity.kt
, no final da funçãoonCreate()
, chamesetOnClickListener
na visualização de textonickname_text
. Transmita uma referência para a função de detecção de cliques, que éupdateNickname()
.
findViewById<TextView>(R.id.nickname_text).setOnClickListener {
updateNickname(it)
}
- Execute o app. Digite um apelido, toque no botão CONCLUÍDO e em seguida a visualização do apelido
TextView
. A visualização do apelido desaparece, e o texto de edição e o botão CONCLUÍDO ficam visíveis.
Observe que, por padrão, a visualização EditText
não tem foco, e o teclado não está visível. É difícil para o usuário descobrir que a visualização de texto do apelido é clicável. Na próxima tarefa, você adicionará um foco e um estilo à visualização de texto do apelido.
Etapa 2: definir o foco para a visualização EditText e mostrar o teclado
- No final da função
updateNickname
, defina o foco como a visualizaçãoEditText
. Use o métodorequestFocus()
.
// Set the focus to the edit text.
editText.requestFocus()
- No final da função
updateNickname
, adicione um código para tornar o teclado visível.
// Show the keyboard.
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(editText, 0)
Etapa 3: adicionar uma cor de plano de fundo à visualização da TextView de apelido
- Defina a cor de fundo da visualização de texto do
nickname_text
como@color/colorAccent
e adicione um padding inferior de@dimen/small_padding
. Essas mudanças servem como uma dica para o usuário de que a visualização de texto do apelido é clicável.
android:background="@color/colorAccent"
android:paddingBottom="@dimen/small_padding"
- Execute o app final. O texto de edição tem foco, o apelido é exibido no texto de edição e a visualização do texto do apelido é estilizada.
Agora, mostre ao seu app interativo Sobre mim para um amigo.
Projeto do Android Studio: AboutMeInteractive
- A ferramenta Layout Editor no Android Studio é um editor de design visual. Você pode usar o Layout Editor para criar o layout do seu app arrastando elementos de IU para ele.
- O
EditText
é um elemento de IU que permite ao usuário inserir e modificar texto. - Uma
Button
é um elemento de IU em que o usuário pode tocar para realizar uma ação. Um botão pode ser formado por texto, um ícone ou ambos.
Listeners de cliques
- Você pode fazer qualquer
View
responder ao toque adicionando um listener de clique a ele. - A função que define o listener de clique recebe o
View
que é clicado.
Há duas maneiras de anexar uma função de listener de cliques a um View
:
- No layout XML, adicione o atributo
android:onClick
ao elemento<
View
>
. - De maneira programática, use a função
setOnClickListener(View.OnClickListener)
noActivity
correspondente.
Curso da Udacity:
- Como desenvolver apps Android com Kotlin (link em inglês)
Documentação do desenvolvedor Android:
Esta seção lista as possíveis atividades para os alunos que estão trabalhando neste codelab como parte de um curso ministrado por um instrutor. Cabe ao instrutor fazer o seguinte:
- Se necessário, atribua o dever de casa.
- Informe aos alunos como enviar o dever de casa.
- Atribua nota aos trabalhos de casa.
Os professores podem usar essas sugestões o quanto quiserem, e eles devem se sentir à vontade para passar o dever de casa como achar adequado.
Se você estiver fazendo este codelab por conta própria, use essas atividades para testar seu conhecimento.
Responda a estas perguntas
Pergunta 1
A EditText
é uma subclasse de qual destas opções?
View
LinearLayout
TextView
Button
Pergunta 2
Qual dos seguintes valores de atributo visibility
faz com que uma visualização fique oculta e não ocupe espaço no layout?
visible
Invisible
gone
hide
Pergunta 3
Para visualizações EditText
, não é uma boa prática fornecer dicas, porque elas atrapalham o campo de entrada. Verdadeiro ou falso?
- Verdadeiro
- Falso
Pergunta 4
Qual das afirmações a seguir sobre visualizações Button
é verdadeira?
- Uma visualização
Button
é um grupo de visualizações. - Você só pode ter três visualizações
Button
por tela. - As visualizações
Button
são clicáveis e, quando ocorre um clique, o listener de cliques anexado realiza uma ação. - Uma visualização
Button
é uma extensão deImageView
.
Inicie a próxima lição:
Para ver links de outros codelabs neste curso, consulte a página de destino dos codelabs do curso Conceitos básicos do Kotlin para Android.