Aula6 Layout
Aula6 Layout
Programação de
Apps Android
●
Gerenciadores de Layouts
(ou Layouts): lidam com o
posicionamento dos elementos
●
Widgets: componentes com os quais
o usuário pode visualizar e interagir
(Button, TextView, ImageView)
INTERFACE GRÁFICA
Editor Visual
•
COMPONENTES
Propriedades Comuns
• Todos os componentes têm algumas propriedades em comum:
Propriedade Descrição Valores
●
Assim qualquer componente herda dessa classe, e
obritagoriamente deve implementar o método
onDraw(canvas), que desenha o componente na tela
— Widgets geralmente herdam diretamente da classeView
— Gerenciadores de layout herdam a classe View por meio
de outra classe android.view.ViewGroup
COMPONENTES
A Classe View
●
INTERFACE GRÁFICA
Layouts
●
São os componentes que tem como propósito agrupar e
organizar outros componentes na tela
●
Todos os layouts devem herdar de android.view.ViewGroup
como vimos na figura de hierarquia da classe View. Assim, um
ViewGroup pode conter vários objetos View e outros
ViewGroup.
INTERFACE GRÁFICA
Layouts
• Os principais layouts são:
Layout Descrição
AbsoluteLayout Posiciona os componentes de forma fixa, utilizando coordenadas x e y.
Deprecated!!
LinearLayout Organiza os componentes linearmente, podendo ser configurado para
exibí-los na horizontal ou vertical.
FrameLayout Tipo mais simples de Layout. Exibe um componente sobre outro,
utilizando uma lógica de pilha.
RelativeLayout Organiza os componentes de forma relativa a outros. Ex: posiciona
componente A acima (a esquerda, direita ou embaixo) do componente B.
INTERFACE GRÁFICA
Layouts
• Os principais layouts são:
Layout Descrição
ScrollView Permite fazer a rolagem na tela quando não houver espaço suficiente
HorizontalScrollView para todos os componentes.
ConstraintLayout* Permite organizar os componentes com base em regras e restrições
TableLayout Organiza os componentes no formato de uma tabela. Esse layout é
uma derivação do LinearLayout.
GridLayout Similar ao TableLayout, mas permite que um componente ocupe mais
de uma linha
LAYOUTS
Linear Layout
• O Linear Layout é outro gerenciador de layout que permite
organizar os elementos na vertical ou horizontal, uns após os
outros
• A forma de organização do
Linear Layout é dada pelo
atributo android:orientation,
que é obrigatório.
LAYOUTS
Linear Layout
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Exemplos de Layouts"
android:layout_gravity="start"
android:paddingHorizontal="10dp"/>
... activity_main.xml
LAYOUTS
Linear Layout
●
Para demonstrar os diversos layouts, crie um projeto
HelloLayouts (Empty Vies Activity), e então altere o arquivo
activity_main.xml conforme a seguir:
...
<Button
android:id="@+id/btn_frame_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Frame Layout"
android:layout_margin="16dp"/>
</LinearLayout> activity_main.xml
INTERFACE GRÁFICA
Padding e Margin
• Todo componente pode definir os atributos android:padding e
android:layout_margin (e seus derivados android:layout_marginHorizontal,
android:layout_marginEnd,android:layout_paddingStart, etc)
• O android:padding é o
espaçamento da borda do
componente para o seu
interior (altera o tamanho
do componente).
INTERFACE GRÁFICA
gravity e layout_gravity
• O atributo android:gravity configura o posicionamento do conteúdo da
própria view ou do próprio layout que especifica esse parâmetro.
• Os valores possíveis são:
Valor Descrição
start, left, end, Empurra os objetos para o canto especificado do
right, top, bottom container
centerVertical, Coloca os objetos no centro vertical ou horizontal
centerHorizontal do container
fillVertical, Aumenta o tamanho vertical e/ou horizontal do
fillHorizontal, objeto se necessário para ele preencher
fill completamente o seu container
clipVertical, Corta as bordas do objeto ao longo do eixo
clipHorizontal, vertical ou horizontal do container
INTERFACE GRÁFICA
gravity e layout_gravity
• O atributo android:layout_gravity configura o posicionamento da view em
relação ao seu layout pai.
• Os valores possíveis são os mesmos de android:gravity:
Valor Descrição
start, left, end, Empurra os objetos para o canto especificado do
right, top, bottom container
centerVertical, Coloca os objetos no centro vertical ou horizontal
centerHorizontal do container
fillVertical, Aumenta o tamanho vertical e/ou horizontal do
fillHorizontal, objeto se necessário para ele preencher
fill completamente o seu container
clipVertical, Corta as bordas do objeto ao longo do eixo
clipHorizontal, vertical ou horizontal do container
LAYOUTS
Frame Layout
• O Frame Layout é o gerenciador de layout mais simples,
empilhando um componente sobre outro durante a exibição.
<ImageView android:id="@+id/imgIcon"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginEnd="8dp"
android:src="@mipmap/ic_launcher_round"/>
<CheckBox android:id="@+id/cbEnable"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"/>
... activity_relative_layout.xml
LAYOUTS
Relative Layout
●
Crie uma activity RelativeLayoutActivity por meio do menu
File →New → Activity → Empty Views Activity:
...
<TextView android:id="@+id/txtTitulo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toStartOf="@id/cbEnable"
android:layout_toEndOf="@id/imgIcon"
android:text="Título"/>
<TextView android:id="@+id/txtSubtitulo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/txtTitulo"
android:layout_toEndOf="@id/imgIcon"
android:text="Subtítulo"/>
</RelativeLayout> activity_relative_layout.xml
LAYOUTS
Relative Layout
●
Agora vamos alterar a activity_main.xml conforme a seguir:
...
<Button
android:id="@+id/btn_relative_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Relative Layout"
android:layout_margin="16dp"/>
</LinearLayout> activity_main.xml
LAYOUTS
Relative Layout
●
Agora vamos alterar a MainActivity.java conforme a seguir:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
Button btnRelativeLayout = findViewById(R.id.btn_relative_layout);
btnRelativeLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getBaseContext(), RelativeLayoutActivity.class);
startActivity(intent); //Navega para a próxima tela
}
});
}
} MainActivity.java
LAYOUTS
Table Layout
• O Table Layout é um gerenciador de layout que organiza os
componentes na forma de tabela, útil para mostrar dados
tabulares (relatórios, formulários, etc).
</TableLayout> activity_table_layout.xml
LAYOUTS
Table Layout
●
Agora vamos alterar a MainActivity conforme a seguir:
...
<Button android:id="@+id/btn_table_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Table Layout"
android:layout_margin="16dp"/>
</LinearLayout> activity_main.xml
<Button
...
android:layout_height="0dp"
android:layout_weight="1"/>
<Button
...
android:layout_height="0dp"
android:layout_weight="1"/>
...
</LinearLayout> activity_main.xml
LAYOUTS
Constraint Layout
• O Constraint Layout é um gerenciador de
layout que permite posicionar e dimensionar os
elementos na tela de acordo com os limites do
layout pai ou dos outros componentes (top, start,
end, bottom).
●
Utilizando a paleta de Widgets, arraste
inicialmente para a tela 3 Buttons e uma
ImageView, selecionando a imagem
backgrounds/scenic na caixa de diálogo
e ajustando as dimensçoes da imagem.
LAYOUTS
Constraint Layout
• As constraints são referenciadas pelo id dos elementos ou o parent, e podem ser
especificadas pelo código ou no editor visual (crie uma activity
ConstraintLayoutActivity):
<ImageView android:id="@+id/imageView"
android:layout_width="100dp" TextView
android:layout_height="100dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/alex_felipe" />
<TextView android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
app:layout_constraintStart_toEndOf="@+id/imageView"
app:layout_constraintTop_toTopOf="parent" />
• As dimensões no Constraint Layout podem ser especificadas usando wrap_content, 0
dp (equivale a match_parent) ou uma dimensão fixa (123 dp)
LAYOUTS
Constraint Layout
• Quando o componente está ancorado nas
duas extremidades verticais ou horizontais,
ficará centralizado.
Agora Sabemos
Qual o layout mais flexível para criar apps
modernos?
60
PONTOS CHAVES
• Conhecer os principais componentes de tela (Widget e Layoyt)
• Saber utilizar o Editor Visual do Android Studio
• Entender as propriedades layout_width,layout_height, layout_weight, layout_margin e padding.
●
Entender a diferença entre layout_gravity e gravity
●
Saber utilizar os principais gerenciadores de layouts
●
Entender a diferença entre as unidades px, dp e sp
●
Saber referenciar as cores utilizando a componente alfa + RGB
●
Saber utilizar o componente ImageView
●
Saber utilizar guidelines e chains no ConstraintLayout
• Referências complementares
Android Guide: Layouts
DevMedia: Técnicas de Layout
61
62