Você deve estar familiarizado com:
LinearLayout
em seu aplicativo.ConstraintLayout
em seu aplicativo para organizar vistas.O aplicativo ColorMyViews é inspirado no artista holandês Piet Mondrian. Ele inventou um estilo de pintura chamado neoplasticismo, que usa apenas linhas verticais e horizontais e formas retangulares em preto, branco, cinza e cores primárias.
Embora as pinturas sejam estáticas, seu aplicativo será interativo! O aplicativo consiste em vistas de texto
clicáveis que mudam de cor quando tocadas e vistas de botão em um constraintLayout
.
Um ConstraintLayout
é um ViewGroup
que permite posicionar e dimensionar vistas filhas de uma forma
flexível. Um layout de restrição permite criar layouts grandes e complexos com hierarquias de vistas plana (sem
grupos de vistas aninhados). Para construir um layout de restrição, você pode usar o editor de layout para
adicionar restrições e arrastar e soltar vistas. Você não precisa editar o XML.
Uma restrição é uma conexão ou alinhamento entre dois elementos da IU. Cada restrição conecta ou alinha uma vista a outra, ao layout pai ou a uma diretriz invisível. Em um layout de restrição, você posiciona uma vista definindo, pelo menos, uma restrição horizontal e uma vertical.
Restrição horizontal: B é restringido para ficar à direita de A. (Em um aplicativo acabado, B precisaria de, pelo menos, uma restrição vertical além desta restrição horizontal).
Restrição vertical: C é restringido para ficar abaixo de A. (Em um aplicativo acabado, C precisaria de, pelo menos, uma restrição horizontal além desta restrição vertical).
Atributo |
Valor |
Modelo |
Empty Activity na guia Phone and Tablet |
Nome do Aplicativo |
ColorMyViews |
Nome da empresa android |
|
Linguagem |
Kotlin |
Nível mínimo de API |
API 19: Android 4.4 (KitKat) |
Este projeto oferecerá suporte a aplicativos instantâneos |
(Deixe esta caixa desmarcada) |
Use AndroidX artifacts |
Selecione esta caixa. |
O modelo de Atividade vazia cria uma única atividade vazia no arquivo Mainactivity.kt
. O modelo
também cria um arquivo de layout chamado activity_main.xml
. O layout usa
ConstraintLayout
como seu grupo de vistas raiz, com um único TextView
como o conteúdo
do layout.
Nesta tarefa, você usa o Android Studio editor de layout para construir um layout de restrição para seu aplicativo.
activity_main.xml
e clique na guia Design.
Autoconnect está ativado. |
|
O Autoconnect está desativado - isso é o que você deseja para este tutorial. |
16dp
. (O padrão é
8dp
).16dp
, novas restrições são criadas com esta margem, para que você não
precise adicionar a margem cada vez que adicionar uma restrição. O inspetor de vista, mostrado na captura de tela abaixo, faz parte do painel Attributes. O inspetor de vistas inclui controles para atributos de layout, como restrições, tipos de restrição, viés de restrição e margens de vista.
O viés de restrição posiciona o elemento de vistas ao longo dos eixos horizontal e vertical. Por padrão, a vista é centralizada entre as duas restrições com um viés de 50%.
Para ajustar o viés, você pode arrastar os controles deslizantes de viés no inspetor de vista. Arrastando um controle deslizante de viés altera a posição da vista ao longo do eixo.
0
. A margem padrão não foi adicionada automaticamente, pois esta vista foi criada antes de você
alterar a margem padrão.16dp
no menu suspenso do inspetor de
vista. Por exemplo, na captura de tela a seguir, você está adicionando layout_marginEnd
(layout_marginRight
).No inspetor de vista, as setas dentro do quadrado representam o tipo de restrição:
layout_marginStart
e
defina o Resource name como margin_wide
.@dimen/margin_wide
, para as margens superior e final.android:layout_marginStart="@dimen/margin_wide"
android:layout_marginTop="@dimen/margin_wide"
android:layout_marginEnd="@dimen/margin_wide"
fontFamily
e selecione a seta suspensa ao lado dele. Role para baixo até
More Fonts e selecione-o. A caixa de diálogo Resources é aberta.roboto
.Isso adiciona uma pasta res/font
que contém um arquivo de fonte roboto.ttf
. Além
disso, o atributo @font/roboto
é definido para sua vista de texto.
res/values/dimens.xml
e adicione o seguinte recurso de dimensão para o tamanho da fonte.
<dimen name="box_text_size">24sp</dimen>
res/values/styles.xml
e adicione o seguinte estilo, que você usará para a vista do texto.
<style name="whiteBox">
<item name="android:background">@android:color/holo_green_light</item>
<item name="android:textAlignment">center</item>
<item name="android:textSize">@dimen/box_text_size</item>
<item name="android:textStyle">bold</item>
<item name="android:textColor">@android:color/white</item>
<item name="android:fontFamily">@font/roboto</item>
</style>
Nesse estilo, a cor de fundo e a cor do texto são definidas para os recursos de cor padrão do Android. A fonte
é definida como Roboto. O texto é alinhado ao centro e em negrito, e o tamanho do texto é definido como
box_text_size
.
box_one
e defina o valor como
Box One
.id
da vista do texto como
box_one_text
. style
como @style/whiteBox
.android:fontFamily="@font/roboto"
, pois esta fonte está presente em whiteBox
.TextView
se adapta às diferentes
configurações de tela.Nesta tarefa, você adiciona outra vista de texto abaixo de box_one_text
. Você restringe a nova
vista de texto a box_one_text
e o elemento pai do layout.
activity_main.xml
e mude para a guia Design. TextView
do painel Palette diretamente para a prévia do editor de
design, conforme mostrado abaixo. Coloque a vista do texto abaixo do box_one_text
, alinhado com a
margem esquerda.Observe que quando você mantém o ponteiro sobre a alça de restrição, a alça fica verde e pisca.
Crie uma restrição que conecte a parte superior da nova vista de texto à parte inferior da vista de texto Box One:
Agora crie uma restrição à esquerda:
res/values/strings.xml
. Adicione um novo recurso de string com o seguinte código:<string name="box_two">Box Two</string>
activity_main.xml
e clique na guia Design. Use o painel
Attributes para definir os seguintes atributos na nova vista de texto:
Atributo |
Valores |
|
|
|
|
|
|
|
|
|
|
Neste caso, você está atribuindo tamanhos fixos para a altura e largura da vista do texto. Atribua tamanhos fixos para altura e largura somente se sua vista deve sempre ter um tamanho fixo em todos dispositivos e layouts.
TextView
verdes, uma acima da outra,
semelhantes à seguinte captura de tela:Nesta tarefa, você adiciona três vistas TextView
. As vistas de texto são alinhadas verticalmente
umas com as outras e alinhadas horizontalmente com a vista de texto da Box Two. As vistas
estarão em uma cadeia.
Uma cadeia é um grupo de vistas vinculadas umas às outras com restrições bidirecionais. As vistas dentro de uma cadeia podem ser distribuídas verticalmente ou horizontalmente. Por exemplo, o diagrama a seguir mostra duas vistas restritas uma à outra, o que cria uma cadeia horizontal.
A primeira vista em uma cadeia é chamada de cabeça da cadeia. Os atributos definidos no cabeçalho da cadeia controlam, posicionam e distribuem todas as vistas na cadeia. Para cadeias horizontais, a cabeça é a vista mais à esquerda. Para cadeias verticais, a cabeça é a vista mais superior. Em cada um dos dois diagramas abaixo, "A" é a cabeça da cadeia.
Os estilos de cadeia definem a maneira como as vistas encadeadas são espalhadas e alinhadas. Você estiliza uma cadeia atribuindo um atributo de estilo de cadeia, adicionando peso ou definindo viés nas vistas.
Existem três estilos de cadeias:
layout_constraintHorizontal_weight
ou
layout_constraintVertical_weight
atributos. Por exemplo, imagine uma cadeia contendo três vistas,
A, B e C. A vista A usa um peso de 1. As vistas B e C usam, cada uma, um peso de 2. O espaço ocupado pelas
vistas B e C é o dobro da vista A, conforme mostrado abaixo.Para adicionar um estilo de cadeia a uma cadeia, defina o atributo layout_constraintHorizontal_chainStyle
ou o atributo
layout_constraintVertical_chainStyle
para a cabeça da cadeia. Você pode adicionar estilos de cadeia
no editor de layout, que aprenderá nesta tarefa.
Como alternativa, você pode adicionar estilos de cadeia no código XML. Por exemplo:
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintVertical_chainStyle="spread_inside"
app:layout_constraintHorizontal_chainStyle="packed"
activity_main.xml
na guia Design. Arraste três vistas
TextView
do painel Palette para o editor de design. Coloque as três novas vistas
de texto à direita da Box Two vista de texto, conforme mostrado abaixo.strings.xml
, adicione os seguintes recursos de string para os nomes das novas vistas
de texto:<string name="box_three">Box Three</string>
<string name="box_four">Box Four</string>
<string name="box_five">Box Five</string>
Atributo |
Top text view |
Middle text view |
Bottom text view |
|
|
|
|
|
|
|
|
|
|
|
|
Na Component Tree, você vê erros sobre restrições ausentes. Você corrige esses erros mais tarde.
layout_width
0dp
, que é
equivalente a alterar o tipo de restrição para Match Constraints.Use o painel Attributes para definir os atributos Layout_margin nas três vistas de texto para adicionar espaçamento entre eles.
@dimen/margin_wide
para as margens
start e end. Remova as outras margens.@dimen/margin_wide
para margens start,
end, top e bottom. Remova as outras margens.
@dimen/margin_wide
para as margens start
e end. Remova as outras margens.TextView
estilizadas. Para ver como as
restrições se comportam em uma tela mais ampla, tente executar o aplicativo em um dispositivo maior ou
emulador, como um Nexus 10.Nesta tarefa, você deixa o aplicativo ColorMyViews um pouco mais colorido. Primeiro, você altera a cor de todas as vistas de texto para branco. Em seguida, você adiciona um tratador de cliques que altera a cor da vista e a cor de fundo do layout quando o usuário toca nele.
styles.xml
, dentro do estilo whiteBox
, altere a cor de fundo para branco. As
vistas de texto começarão em branco com fonte branca e, em seguida, mudarão de cores quando o usuário tocar
nelas. <item name="android:background">@android:color/white</item>
MainActivity.kt
, após a função onCreate()
, adicione uma função chamada
makeColored()
. Use View
como o parâmetro da função. Esta vista é aquela cuja cor
mudará. private fun makeColored(view: View) {
}
Cada vista possui um ID de recurso. O ID do recurso é o valor atribuído ao atributo id
da vista no
arquivo de layout, activity_main.xml
. Para definir uma cor, o código mudará usando uma instrução
when
no ID de recurso da vista. É um padrão comum usar uma função de tratador de clique para muitas
vistas quando a ação de clique é a mesma.
makeColored()
: Adicione um bloco when
para verificar o ID do
recurso da vista. Chame a função setBackgroundColor()
em cada id
da vista para alterar a cor de
fundo da vista usando as constantes da classe Color
.private fun makeColored(view: View) {
when (view.id) {
R.id.box_one_text -> view.setBackgroundColor(Color.DKGRAY)
R.id.box_two_text -> view.setBackgroundColor(Color.GRAY)
R.id.box_three_text -> view.setBackgroundColor(Color.BLUE)
R.id.box_four_text -> view.setBackgroundColor(Color.MAGENTA)
R.id.box_five_text -> view.setBackgroundColor(Color.BLUE)
}
}
android.graphics.Color
. Se o Android Studio não tiver importado esta biblioteca automaticamente,
use uma instrução import
para adicionar a biblioteca antes da definição da classe
MainActivity
.id
não corresponder a nenhuma das vistas, você sabe que o usuário tocou no fundo. No final da instrução
when
, adicione uma instrução else
. Dentro do else
, defina a cor de
fundo para cinza claro.else -> view.setBackgroundColor(Color.LTGRAY)
activity_main.xml
, adicione um id
ao layout de restrição raiz. O sistema
Android precisa de um identificador para alterar sua cor.android:id="@+id/constraint_layout"
MainActivity.kt
, adicione uma função chamada setListeners()
para definir a
função de ouvinte de cliques, makeColored()
, em cada exibição. Use findViewByID
para
obter uma referência para cada vista de texto e para o layout raiz. Atribua cada referência a uma variável.
private fun setListeners() {
val boxOneText = findViewById<TextView>(R.id.box_one_text)
val boxTwoText = findViewById<TextView>(R.id.box_two_text)
val boxThreeText = findViewById<TextView>(R.id.box_three_text)
val boxFourText = findViewById<TextView>(R.id.box_four_text)
val boxFiveText = findViewById<TextView>(R.id.box_five_text)
val rootConstraintLayout = findViewById<View>(R.id.constraint_layout)
}
Para que este código seja executado, ele precisa da biblioteca android.widget.TextView
. Se o
Android Studio não importar esta biblioteca automaticamente, use uma instrução import
para
adicionar a biblioteca antes da definição da classe MainActivity
.
setListeners()
, defina uma List
de vistas. Nomeie a lista como clickableViews
e adicione
todas as instâncias de vistas à lista.fun setListeners() {
...
val clickableViews: List<View> =
listOf(boxOneText, boxTwoText, boxThreeText,
boxFourText, boxFiveText, rootConstraintLayout)
}
setListeners()
, defina o ouvinte para cada vista. Use um laço
for
e a função setOnClickListener()
. for (item in clickableViews) {
item.setOnClickListener { makeColored(it) }
MainActivity.kt
, no final da função onCreate()
, faça uma chamada para
setListeners()
.override fun onCreate(savedInstanceState: Bundle?) {
...
setListeners()
}
Use imagens em vez de cores e texto como plano de fundo para todas as vistas. O aplicativo deve revelar as imagens quando o usuário toca nas vistas de texto.
Dica: adicione imagens ao aplicativo como recursos drawable. Use a função setBackgroundResource()
para definir uma imagem como plano de fundo da vista.
Exemplo:
R.id.box_two_text -> view.setBackgroundResource(R.drawable.image_two)
A restrição da linha de base alinha a linha de base do texto de uma vista com a linha de base do texto de outra vista. O alinhamento de vistas que contêm texto pode ser um desafio, especialmente se as fontes tiverem tamanhos diferentes. A restrição de linha de base faz o trabalho de alinhamento.
Você pode criar restrições de linha de base no editor de layout usando o ícone Edit
Baseline, que é exibido abaixo da vista
quando você mantém o ponteiro sobre ela. O código XML equivalente para a restrição de linha de base tem o
atributo de layout de restrição, layout_constraintBaseline_toBaselineOf
.
Código XML de amostra para a restrição de linha de base:
<Button
android:id="@+id/buttonB"
...
android:text="B"
app:layout_constraintBaseline_toBaselineOf="@+id/buttonA" />
Nesta tarefa, você adiciona instruções que informam ao usuário como usar o aplicativo. Você cria duas vistas
TextView
, uma para um rótulo e outra para as informações de instruções. As vistas de texto possuem
tamanhos de fonte diferentes e você alinha suas linhas de base.
activity_main.xml
na guia Design e arraste uma vista de texto do painel
Palette para o editor de design. Coloque a vista de texto abaixo da Box Two.
Esta vista de texto conterá o texto que rotula as instruções.strings.xml
, crie um recurso de string para a vista do rótulo TextView
.<string name="how_to_play">How to play:</string>
TextView
:
Atributo |
Valor |
|
|
|
|
|
|
|
|
|
B (bold) |
16dp
.label_text
ao elemento pai do layout. activity_main.xml
, o editor de layout adiciona o atributo
layout_marginStart
com um valor embutido em código de 16dp
.
Substitua 16dp
por @dimen/margin_wide
. O código XML agora é
semelhante a este:<TextView
android:id="@+id/label_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_wide"
android:fontFamily="@font/roboto"
android:text="@string/how_to_play"
android:textSize="24sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
tools:layout_editor_absoluteY="287dp"/>
Os atributos de tempo de design são usados e aplicados apenas durante o design do layout, não no tempo de execução. Quando você executa o aplicativo, os atributos de tempo de design são ignorados.
Os atributos de tempo de design são prefixados com o namespace tools
, por exemplo,
tools:layout_editor_absoluteY
no fragmento de código gerado mostrado acima. Esta
linha de código foi adicionada, pois você ainda não adicionou uma restrição vertical.
Todas as vistas em um ConstraintLayout
precisam ser restringidas horizontal e verticalmente, ou
então as vistas saltam para uma borda do pai quando você executa o aplicativo. É por isso que o editor de layout
adiciona tools:layout_editor_absoluteX
se a vista não estiver restrita horizontalmente. O editor de
layout fornece ao atributo de tempo de design o valor da posição atual da vista no layout, para manter as vistas
no lugar durante o design. Você pode ignorar com segurança esses atributos de tools
, pois o Android
Studio os remove depois de criar as restrições.
Usando atributos de tempo de design, você também pode adicionar prévia de dados de amostra a uma vista de texto ou vista de imagem de dentro do editor de layout.
Experimente fazer experiências com dados de amostra:
label_text
, conforme mostrado abaixo. Esta nova vista de texto é
para as informações de ajuda que o usuário verá. Certifique-se de que a nova vista esteja verticalmente
deslocada da vista label_text
, para que você possa ver o que acontece quando você cria a
restrição de linha de base.strings.xml
, crie um recurso de string para a nova vista de texto.<string name="tap_the_boxes_and_buttons">Tap the screen and buttons.</string>
Atributo |
Valor |
|
|
|
|
|
|
|
|
info_text
à extremidade direita do elemento pai. Restrinja o lado
esquerdo do info_text
à direita (final) do label_text
.label_text
. O ícone Edit Baseline aparece abaixo da vista. Clique no ícone . (A vista pode saltar para um novo local em seu layout).Sem restrições verticais, as vistas vão para o topo da tela (vertical 0) no tempo de execução. Adicione restrições verticais manterá as duas vistas de texto no lugar quando você executar o aplicativo.
info_text
à parte inferior do layout. info_text
na parte inferior do box_two_text
.
info_text
para cima ou para baixo.
Observe que a vista label_text
segue e permanece alinhada na linha de base.info_text
para 0
. Isso
mantém as vistas de texto mais próximas da vista restrita superior, Box Two. (Se o inspetor
de vistas não estiver visível no painel Attributes quando você clicar na vista no editor de
design, feche e reabra o Android Studio).<TextView
android:id="@+id/label_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_wide"
android:text="@string/how_to_play"
android:textSize="24sp"
android:textStyle="bold"
app:layout_constraintBaseline_toBaselineOf="@+id/info_text"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/info_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_wide"
android:layout_marginTop="@dimen/margin_wide"
android:layout_marginEnd="@dimen/margin_wide"
android:layout_marginBottom="@dimen/margin_wide"
android:text="@string/tap_the_boxes_and_buttons"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/label_text"
app:layout_constraintTop_toBottomOf="@+id/box_two_text"
app:layout_constraintVertical_bias="0.0" />
Nesta tarefa, você adiciona três vistas de Button
e as encadeia.
activity_main.xml
na guia Design. Arraste três botões do painel
Palette para a parte inferior do layout.strings.xml
, adicione os seguintes recursos de string para as vistas do
Button
:
<string name="button_red">RED</string>
<string name="button_yellow">YELLOW</string>
<string name="button_green">GREEN</string>
Atributo |
Left button |
Middle button |
Right button |
|
|
|
|
|
|
|
|
red_button
e green_button
à linha de base de yellow_button
. (Para
adicionar uma restrição de linha de base a uma vista, clique na vista e use o ícone Edit
Baseline que aparece abaixo da vista).
16dp
para o
yellow_button
, se essas margens ainda não estiverem definidas.red_button
para 16dp
.
Defina a margem direita do green_button
para 16dp
.yellow_button
à parte inferior do info_text
.yellow_button
à parte inferior do layout.yellow_button
para 100
(1.0
no XML), para
colocar os botões na parte inferior do layout. Button
será semelhante ao seguinte:<Button
android:id="@+id/red_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_wide"
android:text="@string/button_red"
android:visibility="visible"
app:layout_constraintBaseline_toBaselineOf="@+id/yellow_button"
app:layout_constraintEnd_toStartOf="@+id/yellow_button"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/yellow_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_wide"
android:layout_marginTop="@dimen/margin_wide"
android:layout_marginBottom="@dimen/margin_wide"
android:text="@string/button_yellow"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/green_button"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/red_button"
app:layout_constraintTop_toBottomOf="@+id/info_text"
app:layout_constraintVertical_bias="1.0" />
<Button
android:id="@+id/green_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/button_green"
app:layout_constraintBaseline_toBaselineOf="@+id/yellow_button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/yellow_button" />
Nesta tarefa, você adiciona um tratador de cliques a cada vista do Button
. O tratador de cliques
altera a cor das vistas TextView
.
res/values/colors.xml
: <color name="my_green">#12C700</color>
<color name="my_red">#E54304</color>
<color name="my_yellow">#FFC107</color>
MainActivity.kt
, use findViewById
para obter referências para as vistas de
botão. Para fazer isso, coloque o seguinte código dentro da função de tratador de cliques
setListeners()
, acima da declaração clickableViews
: val redButton = findViewById<TextView>(R.id.red_button)
val greenButton = findViewById<TextView>(R.id.green_button)
val yellowButton = findViewById<TextView>(R.id.yellow_button)
setListeners()
, adicione as referências das vistas do Button
à lista de
vistas clicáveis.private fun setListeners() {
...
val clickableViews: List<View> =
listOf(boxOneText, boxTwoText, boxThreeText,
boxFourText, boxFiveText, rootConstraintLayout,
redButton, greenButton, yellowButton
)
...
}
makeColored()
, adicione código para alterar as cores das vistas de texto
quando o usuário tocar nos botões. Adicione o novo código acima da instrução else
, conforme
mostrado:private fun makeColored(view: View) {
when (view.id) {
...
R.id.red_button -> box_three_text.setBackgroundResource(R.color.my_red)
R.id.yellow_button -> box_four_text.setBackgroundResource(R.color.my_yellow)
R.id.green_button -> box_five_text.setBackgroundResource(R.color.my_green)
else -> view.setBackgroundColor(Color.LTGRAY)
}
}
Remova o texto e os botões de seu aplicativo e preencha todo o layout com caixas de cores (vistas
TextView
). Seu aplicativo deve alternar ou alterar as cores quando o usuário tocar na tela.
Projeto Android Studio: ColorMyViews
ConstraintLayout
é um ViewGroup
que permite posicionar e dimensionar as vistas filhas do layout
de uma forma flexível. Vantagens de usar ConstraintLayout
:
ConstraintLayout
geralmente resulta em uma hierarquia de vistas mais plana do que
LinearLayout
.
Cadeias:
Atributos de tempo de design:
tools
. Por exemplo, os atributos
tools:layout_editor_absoluteY
e tools:text
são atributos de tempo de design.
Restrições de linha de base:
Documentação para desenvolvimento em Android:
Esta seção lista as possíveis tarefas de casa para os alunos que estão trabalhando neste tutorial como parte de um curso ministrado por um instrutor.
Em um layout de restrição, qual das opções a seguir descreve as restrições necessárias para manter uma vista no lugar durante o tempo de execução?
Qual dos seguintes tipos de restrição expande uma vista apenas o necessário para ajustar seu conteúdo?
A restrição da linha de base alinha a linha de base do texto de uma vista com a linha de base do texto de outra vista. Verdadeiro ou falso?
O inspetor de vistas está disponível apenas para vistas em _______.
ConstraintLayout
ConstraintLayout
ou um LinearLayout
ViewGroup
LinearLayout
Uma cadeia é um grupo de vistas vinculadas entre si por ________.
Comece a próxima lição:
Para obter enlaces para outros tutoriais neste curso, consulte a página de destino dos tutoriais Fundamentos de Android em Kotlin.