android – layout manager · classe view a classe android.view.view é a classe mãe de todos os...

30
Android – Layout Manager Ivan Nicoli

Upload: others

Post on 11-Sep-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Android – Layout Manager

Ivan Nicoli

Page 2: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Classe View

● A classe android.view.View é a classe mãe de todos os componentes visuais do Android.

● Qualquer desenvolvedor pode criar seu próprio componente herdando a classe View e implementando o método onDraw(canvas).

● Existem dois tipos de componentes visuais:

– Widgets. Ex: Buttons, ImageView, TextView...– Layout Manager: Ex: LinearLayout, AbsoluteLayout,

TableLayout...● Os gerenciadores de layout são filhos de uma subclasse da

classe View. A classe ViewGroup.

Page 3: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

FrameLayout

● É o layout manager mais simples de todos.● Cada componente é adicionado em um novo

“Frame” na tela. ● O primeiro adicionado ficará no fundo da tela os

demais ficarão “por cima” dele.● Atualmente pode ser substituído pela tag merge

com algumas otimizações.

Page 4: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Exercício 1 – FrameLayout (1/2)

● Crie um projeto chamado ExplorandoLayoutManager.

● Crie um MenuActivity do tipo ListActivity e adicione o menu Exemplo Frame Layout e Sair.

● Crie uma Activity chamada FrameLayoutActivity. Sua implementação deve simplesmente chamar o arquivo xml R.layout.framelayout.

● Adicione uma imagem chamada paisagem.jpg na pasta res/drawable-hdpi.

Page 5: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Exercício 1 – FrameLayout (2/2)● Adicione a seguinte implementação no arquivo

framelayout.xml:

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:contentDescription="@string/paisagem" android:src="@drawable/paisagem" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/paisagem" android:layout_gravity="center" android:padding="12dp" android:background="#AA000000"/></FrameLayout>

Page 6: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

LinearLayout● Layout padrão do Android. ● Organiza os componentes de forma horizontal ou

vertical.● Os componentes internos podem ser alinhados pelo

atributo android:layout_gravity.● O tamanho de cada componente pode ser

proporcional ao atributo layout_weight com relação aos demais componentes da tela.

Page 7: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

TableLayout● Para solucionar problemas como: manter a proporção entre

diversos componentes do tipo LinearLayout numa mesma tela. Foi criado o LayoutManager TableLayout.

● TableLayout é uma classe filha do LinearLayout. O TableLayout é um LinearLayout vertical.

● Em sua construção, aninhados ao TableLayout serão adicionados vários componentes do Tipo TableRow.

● O componente TableRow também é uma classe filha de LinearLayout. TableRow é um LinearLayout horizontal.

● A vantagem desta junção é que é mantida a proporcionalidade entre as colunas de vários componentes TableRow dentro de um TableLayout

Page 8: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Exercício 2 - TableLayout● Reconstrua o Layout da Calculadora utilizando o TableLayout.

● Disposição dos componentes:

– Console

– Botão Limpar

– 7, 8, 9, /

– 4, 5, 6, *

– 1, 2, 3, -

– ., 0, =, +

● (Optativo) Construa o mesmo layout utilizando o LinearLayout e veja a desproporcionalidade entre os tamanhos dos botões.

Page 9: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

TableLayout● Dois atributos importantes do LayoutManager TableLayout,

são:

– android:shrinkColumns: Permite que as colunas especificadas sejam comprimidas de forma que ocorra quebras de linha, se necessário, para exibição do texto.

– android:stretchColumns: Permite especificar quais colunas devem ser “esticadas” para que a linha ocupe todo o espaço.

● Exemplos de especificação: android:stretchColumns=”0,1” para as colunas 1 e 2 ou android:stretchColumns=”*” para todas as colunas.

Page 10: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Exercício 3 – shrinkColumns (1/2)● Crie uma Activity ShrinkColumnsTL que realiza a chamada:

setContentView(R.layout.shrinkcolumnstl)

● Crei o arquivo shrinkcolumnstl.xml, com o seguinte conteúdo:<?xml version="1.0" encoding="utf-8"?><TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:shrinkColumns="1"> <TableRow > <TextView android:text="@string/texto_1"/> <TextView android:text="@string/texto_2_texto_2_texto_2_texto_2_"/> <TextView android:text="@string/texto_3"/> <TextView android:text="@string/texto_4"/> </TableRow> <TableRow > <TextView android:text="@string/texto_1"/> <TextView android:text="@string/texto_2"/> <TextView android:text="@string/texto_3"/> <TextView android:text="@string/texto_4"/> </TableRow></TableLayout>

Page 11: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Exercício 3 – shrinkColumns (2/2)● Adicione a Activity no menu da aplicação e no

AndroidManifest.xml

● Execute e verifique o resultado.

● Adicione a tag TableLayout adicionando o atributo android:shrinkColumns, como abaixo:<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:shrinkColumns="1">

● Verifique o resultado obtido.

● Observe que o texto foi quebrado para que fosse possível a visualização da linha.

Page 12: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Exercício 4 – strecthColumns (1/2)● Crie uma Activity StretchColumnsTL que realiza a chamada:

setContentView(R.layout.stretchcolumnstl)

● Crei o arquivo stretchcolumnstl.xml, com o conteúdo:<?xml version="1.0" encoding="utf-8"?><TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TableRow> <Button android:text="@string/texto_1" /> <Button android:text="@string/texto_2" /> <Button android:text="@string/texto_3" /> <Button android:text="@string/texto_4" /> </TableRow> <TableRow> <Button android:text="@string/texto_1" /> <Button android:text="@string/texto_2" /> <Button android:text="@string/texto_3" /> <Button android:text="@string/texto_4" /> </TableRow></TableLayout>

Page 13: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Exercício 4 – stretchColumns (2/2)● Adicione a Activity no menu da aplicação e no

AndroidManifest.xml

● Execute e verifique o resultado.

● Adicione a tag TableLayout adicionando o atributo android:stretchColumns, como abaixo:<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="1,2">

● Verifique o resultado obtido.

● Observe que a largura dos componentes da segunda e da terceira coluna foram alterados preencher de toda a linha.

Page 14: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Exercício 5 – Login Table Layout● Crie uma Activity chamada LoginTL que realize a chamada:

setContentView(R.layout.logintl);

● Crie o arquivo logintl.xml e adicione o conteúdo a seguir:<?xml version="1.0" encoding="utf-8"?><TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="1" > <TableRow> <TextView android:text="@string/usuario" /> <EditText android:inputType="text" /> </TableRow> <TableRow> <TextView android:text="@string/senha" /> <EditText android:inputType="text" android:password="true" /> </TableRow> <TableRow android:gravity="right"> <Button android:text="@string/login"/> </TableRow></TableLayout>

Page 15: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

RelativeLayout● Permite posicionar componentes ao lado, abaixo ou acima de outro

componente já existente, referenciado pelo id.

● Poderão ser utilizados os seguintes atributos para realizar um alinhamento relativo:

– android:layout_below

– android:layout_above

– android:layout_toRightOf

– android:layout_toLeftOf

– android:layout_alignLeft

– android:layout_alignRight

– android:layout_alignTop

– android:layout_alignBaseLine

Page 16: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Exercício 6 – Login RelativeLayout (1/2)

● Crie uma Activity chamada LoginRL que realiza a chamada setContentView(R.layout.loginrl);

● Crie um arquivo loginrl.xml com o conteúdo:<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/usuario" style="@style/componentesRL" android:text="@string/usuario" /> <TextView android:id="@+id/senha" style="@style/componentesRL" android:layout_below="@id/usuario" android:text="@string/senha" /> <EditText android:id="@+id/txtusuario" style="@style/textsRL" android:layout_toRightOf="@id/usuario" android:inputType="text" /> <EditText android:id="@+id/txtsenha" style="@style/textsRL" android:layout_alignLeft="@id/txtusuario" android:layout_below="@id/txtusuario" android:inputType="text" android:password="true" /> <Button android:id="@+id/login" style="@style/componentesRL" android:layout_alignRight="@id/txtsenha" android:layout_below="@id/txtsenha" android:text="@string/login" /></RelativeLayout>

Page 17: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Exercício 6 – Login RelativeLayout (2/2)

● Adicione a classe LoginRL no menu principal da aplicação e no AndroidManifest.xml

● Crie as definições de estilo: <style name="componentesRL"> <item name="android:layout_height">wrap_content</item> <item name="android:layout_width">wrap_content</item> <item name="android:padding">10dip</item> </style> <style name="textsRL" parent="componentesRL"> <item name="android:layout_width">fill_parent</item> </style>

Page 18: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

AbsoluteLayout● Layout que permite controlar a posição x e y exata

em que o componente vai aparecer.● Em diferentes dispositivos o mesmo aplicativo pode

aparecer de forma diferente. ● Os atributos que controlam a posição do

componente são:– android:layout_x– android:layout_y

Page 19: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Exercício 7 – Login AbsoluteLayout (1/2)

● Crie uma Activity chamada LoginAL que realiza a chamada setContentView(R.layout.loginal);

● Crie um arquivo loginal.xml com o conteúdo:<?xml version="1.0" encoding="utf-8"?><AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView style="@style/componenteAL" android:layout_x="0dp" android:layout_y="12dp" android:text="@string/usuario" /> <TextView style="@style/componenteAL" android:layout_x="0dp" android:layout_y="62dp" android:text="@string/senha" /> <EditText style="@style/textAL" android:layout_x="50dp" android:layout_y="0dp" android:inputType="text" /> <EditText style="@style/textAL" android:layout_x="50dp" android:layout_y="50dp" android:inputType="text" /> <Button style="@style/componenteAL" android:layout_x="249dp" android:layout_y="100dp" android:text="@string/login" /></AbsoluteLayout>

Page 20: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Exercício 7 – Login AbsoluteLayout (2/2)

● Adicione a classe LoginAL no menu principal da aplicação e no AndroidManifest.xml

● Crie as definições de estilo: <style name="componenteAL"> <item name="android:layout_height">wrap_content</item> <item name="android:layout_width">wrap_content</item> </style> <style name="textAL" parent="componenteAL"> <item name="android:layout_width">250dp</item> </style>

Page 21: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

ScrollView● A classe android.widget.ScrollView é utilizada para

telas que contem muitos componentes.● A classe ScrollView é uma subclasse de

FrameLayout. Dessa forma, pode receber apenas um componente, que vai ocupar o tamanho inteiro da tela.

● Para utilizar de forma adequada é necessário adicionar um layout dentro manager aninhado ao ScrollView

Page 22: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Exercício 8 – ScrollView (1/2)● Crie a Activity CemTextViewsSV bem como o

arquivo de layout cemtextviewssv.xml.● Adicione o conteúdo a seguir no arquivo

cemtextviewssv.xml:

<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" > <LinearLayout android:id="@+id/scrollViewLinearLayout" android:layout_width="fill_parent" android:layout_height="wrap_content" > </LinearLayout></ScrollView>

Page 23: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Exercício 8 – ScrollView (2/2)● Adicione a Activity CemTextViewsSV no menu da

aplicação e no AndroidManifest.xml● Adicione a seguinte implementação no método

onCreate da classe CemTextViewsSV:

super.onCreate(savedInstanceState); setContentView(R.layout.cemtextviewssv); LinearLayout ll = (LinearLayout) findViewById(R.id.scrollViewLinearLayout); for (int i = 0; i < 100; i++) {

TextView t = new TextView(this);t.setText("TextView número: " + i);ll.addView(t);

}

Page 24: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Gallery

● O componente android.widget.Gallerty é capaz de organizar componentes lado a lado na horizontal.

● Muito útil para criar uma galeria de imagens.

Page 25: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Exercício 9 – Gallery (1/3)● Crie uma activity chamada Exemplo Gallery. Adicione-a no

AndroidManifest e no menu da aplicação.

● Crie um arquivo de layout chamado exemplogallery.xml, com o conteúdo:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/exemplo_gallery" android:textSize="30dp" /> <Gallery android:id="@+id/myGallery" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center"/></LinearLayout>

Page 26: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Exercício 9 – Gallery (2/3)● Adicione a implementação a seguir na classe ExemploGallery:

int[] imagens = { R.drawable.i1, R.drawable.i2, R.drawable.i3, R.drawable.i4, R.drawable.i5 };protected void onCreate(Bundle savedInstanceState) {

setContentView(R.layout.exemplogallery);Gallery g = (Gallery) findViewById(R.id.myGallery);g.setAdapter(new BaseAdapter() {

public View getView(int position, View convertView, ViewGroup parent) {ImageView iv = new ImageView(ExemploGallery.this);iv.setImageResource(imagens[position]);iv.setLayoutParams(new Gallery.LayoutParams(100, 150));return iv;

}public long getItemId(int position) {return position;}public Object getItem(int position) {return imagens[position];}public int getCount() {return imagens.length;}

});g.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {ImageView iv = new ImageView(ExemploGallery.this);iv.setImageResource(imagens[arg2]);Toast t = new Toast(ExemploGallery.this);t.setView(iv);t.show();

}});

}

Page 27: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Exercício 9 – Gallery (3/3)● Procure pela palavra Android no

images.google.com.● Pesquise por imagens do tamanho 200x200● Realize o download de cinco imagens.● Nomeie-as como: i1.jpg, i2.jpg, i3.jpg, i4.jpg e

i5.jpg.● Adicione-as no diretório res/drawable-hdpi.

Page 28: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

WebView● O android possui um componente que permite

visualizar páginas web dentro da aplicação desenvolvida.

● O funcionamento do componente é idêntico ao do navegador do android.

Page 29: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Exercício 10 – WebView● Crie uma nova Activity chamada PaginaTerra, com

o conteúdo a seguir:@Overrideprotected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);WebView wv = new WebView(this);wv.loadUrl("http://m.terra.com.br");setContentView(wv);

}

● Adicione a declaração da Activity no AndroidManifest e no menu principal da aplicação.

● No arquivo AndroidManifest adicione a instrução:<uses-permission android:name="android.permission.INTERNET"/>

Page 30: Android – Layout Manager · Classe View A classe android.view.View é a classe mãe de todos os componentes visuais do Android. Qualquer desenvolvedor pode criar seu próprio componente

Fim