You are on page 1of 56

Programação
para
a
Plataforma
Android
–
Aula
4


Objetos
Gráficos

•  Depuração
simples:
imprimindo
eventos

•  Lidando
com
botões
e
spinners

•  Carregando
múlEplas
aEvidades
em
uma
aplicação

•  O
padrão
adapter

•  Mostrando
vários
itens
com
listas

•  Os
diversos
layouts

Views
(de
novo)

•  Visão
(view):
um
objeto
que
“sabe”
se

desenhar
na
tela.

•  Grupos
(ViewGroup):
uma
visão
que
pode

conter
outras.

•  Layout:
uma
visão
que
“sabe”
dispor
outras

visões
na
tela
do
aparelho.

o p o m o r fismo:
Antr
e s d e q ua n do um
Ed
d aç o de c ó digo
pe
uer
“sabe” qualq
coisa?
Textos
e
Botões

Primeira aplicação:
Crie a visão mostrada ao lado.
•  Um clique no botão faz com
que o texto exibido seja
impresso no log do Android.
•  O log do Android é um
arquivo de texto que pode ser
usado para depuração.

Saída crua:
O
Log
do
Android
 Podem o s u sa r e
olher
s se
log para rec
fo r m a çõ e s de
in
r a çã o e t es tes
depu
d e s e m p e n ho
de
O
Log
do
Android

•  Texto
é
impresso
pela
classe

Log,
que
possui
cinco
métodos

estáEcos.
Cada
método

impreme
em
uma
cor

diferente:

–  Log.v:
texto
verboso
(preto)

–  Log.d:
texto
de
depuração
(azul)

–  Log.i:
texto
informaEvo
(verde)

–  Log.w:
texto
de
aviso
(laranja)

–  Log.e:
texto
de
erro
(vermelho)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=”…"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/txtDemo"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/> la”
<EditText Qual é a “co
n t re a in t erface
android:id="@+id/eTxtDemo" e
igo
android:layout_width="fill_parent" XML e o cód
android:layout_height="wrap_content"
/>
Java?
<Button
android:id="@+id/btnDone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Log it"
/>
</LinearLayout>
Os
Nomes
dos
Componentes

public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txt1 = (TextView)findViewById(R.id.txtDemo);
etxt1 = (EditText)findViewById(R.id.eTxtDemo);
btn1 = (Button)findViewById(R.id.btnDone);
txt1.setText("Entre seu texto");
btn1.setOnClickListener(btnDoneOnClick);
}
Falta ainda
programar o
evento. Como fica
isso?
Mais
um
evento
de
botão

private final Button.OnClickListener
btnDoneOnClick = new Button.OnClickListener() {
public void onClick(View v) {
String input = etxt1.getText().toString();
1
 Log.v("TextViewDemo", input);
2
 etxt1.setText("");
}
};
1.  O
que
significam
os
parâmetros
de
Log.v?

2.  O
que
essa
linha
está
fazendo?

Botões
com
Imagens


...
<ImageButton
android:id="@+id/btnDone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
...

public void onCreate(Bundle savedInstanceState) {


...
btn1 = (ImageButton) findViewById(R.id.btnDone);
btn1.setImageResource(R.drawable.log);
...
}
Caixas
de
Marcação

<CheckBox
android:id="@+id/cbxBox1"
o m o i mpl e m e ntar
android:layout_width="40dp" C
android:layout_height="40dp" a camada de
android:checked="false"/>
controle dessa
<TextView
a p l i c ação?
android:id="@+id/txtCheckBox"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="CheckBox: caixa desmarcada"
/>
Eventos
de
Marcação

public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
checkBox = (CheckBox) findViewById(R.id.cbxBox1);
txtCheckBox = (TextView) findViewById(R.id.txtCheckBox);
checkBox.setOnClickListener(new CheckBox.OnClickListener()
{
public void onClick(View v)
{
if (checkBox.isChecked())
{
txtCheckBox.setText("CheckBox: caixa marcada!");
} else {
txtCheckBox.setText("CheckBox: caixa desmarcada...");
}
}

}
});
Qual o próximo componente gráfico?!
Botões
de
Rádio

<RadioGroup
android:id="@+id/rgGroup1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioButton android:id="@+id/RB1”
android:text="Button1" />
<RadioButton android:id="@+id/RB2”
android:text="Button2" />
<RadioButton android:id="@+id/RB3”
android:text="Button3" />
</RadioGroup>
<TextView
android:id="@+id/txtRadio"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=
"RadioGroup: nada escolhido ainda"
/>
Botões
de
Rádio

<RadioGroup
android:id="@+id/rgGroup1"
android:layout_width="fill_parent"
ntar
Como impleme
android:layout_height="wrap_content"
camada de
android:orientation="vertical">
a
<RadioButton android:id="@+id/RB1” essa
android:text="Button1" />cont
role d
aplicação?
<RadioButton android:id="@+id/RB2”
android:text="Button2" />
<RadioButton android:id="@+id/RB3”
android:text="Button3" />
</RadioGroup>
<TextView
android:id="@+id/txtRadio"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=
"RadioGroup: nada escolhido ainda"
/>
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txtRadio = (TextView) findViewById(R.id.txtRadio);
rb1 = (RadioButton) findViewById(R.id.RB1);
rb2 = (RadioButton) findViewById(R.id.RB2);
rb3 = (RadioButton) findViewById(R.id.RB3);
// React to events from the RadioGroup
rb1.setOnClickListener(new RadioGroup.OnClickListener() {
public void onClick(View v) {
txtRadio.setText("Radio: escolhido botao 1");
}
});
rb2.setOnClickListener(new RadioGroup.OnClickListener() {
public void onClick(View v) {
txtRadio.setText("Radio: escolhido botao 2");
}
});
rb3.setOnClickListener(new RadioGroup.OnClickListener() {
public void onClick(View v) {
txtRadio.setText("Radio: escolhido botao 3");
}
});
}
<Spinner
android:id="@+id/spnMusketeers"
android:layout_width="250dp"
Spinners

android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="2dp"
/>
Spinner:
layout
Completo

<?xml
version="1.0"
encoding="u/‐8"?>


<LinearLayout
xmlns:android="h5p://schemas.android.com/apk/res/android"




android:orientaEon="ver?cal"




android:layout_width="fill_parent"




android:layout_height="fill_parent"


>



<Spinner






android:id="@+id/spnMusketeers"






android:layout_width="250dp"






android:layout_height="wrap_content"






android:layout_centerHorizontal="true"






android:layout_marginTop="2dp"




/>

</LinearLayout>

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); O
que
faz
esse
bloco
de
código?

spnMusketeers = (Spinner) findViewById(R.id.spnMusketeers);
List<String> lsMusketeers = new ArrayList<String>();
lsMusketeers.add("Athos");
lsMusketeers.add("Porthos");
lsMusketeers.add("Aramis");
ArrayAdapter<String> aspnMusketeers =
new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, lsMusketeers);
aspnMusketeers.setDropDownViewResource
(android.R.layout.simple_spinner_dropdown_item);
spnMusketeers.setAdapter(aspnMusketeers);
spnMusketeers.setOnItemSelectedListener
(new OnItemSelectedListener() {
public void onNothingSelected(AdapterView<?> arg0) {}
public void onItemSelected
(AdapterView<?> parent, View v, int position, long id) {
// ???
} E
esse
bloco
de
código,
o
que
faz?

});
}
public void onCreate(Bundle savedInstanceState) {
Eventos de Spinner:
super.onCreate(savedInstanceState);
setContentView(R.layout.main); Adicione um controlador de
eventos a essa spinner
spnMusketeers = (Spinner) findViewById(R.id.spnMusketeers);
List<String> lsMusketeers = new ArrayList<String>();
lsMusketeers.add("Athos");
•  Modifique a visão para incluir
lsMusketeers.add("Porthos"); uma caixa de texto.
lsMusketeers.add("Aramis"); •  Cada item selecionado deve
ArrayAdapter<String> aspnMusketeers =
new ArrayAdapter<String>(this,
ser mostrado na caixa de
texto. lsMusketeers);
android.R.layout.simple_spinner_item,
aspnMusketeers.setDropDownViewResource
(android.R.layout.simple_spinner_dropdown_item);
spnMusketeers.setAdapter(aspnMusketeers);
spnMusketeers.setOnItemSelectedListener
(new OnItemSelectedListener() {
public void onNothingSelected(AdapterView<?> arg0) {???}
public void onItemSelected
(AdapterView<?> parent, View v, int position, long id) {
// ???
}
});
}
Spinner
mais
Caixa
de
Texto

<?xml
version="1.0"
encoding="u/‐8"?>


<LinearLayout
xmlns:android="h5p://schemas.android.com/apk/res/android"




android:orientaEon="ver?cal"




android:layout_width="fill_parent"




android:layout_height="fill_parent"


>



<Spinner






android:id="@+id/spnMusketeers"






android:layout_width="250dp"






android:layout_height="wrap_content"






android:layout_centerHorizontal="true"






android:layout_marginTop="2dp"




/>



<TextView






android:id="@+id/txtSpinner"






android:layout_width="fill_parent"






android:layout_height="wrap_content"






android:text="Spinner:
nenhum
item
selecionado"




/>

</LinearLayout>

Eventos
de
Spinner

spnMusketeers.setOnItemSelectedListener(
new OnItemSelectedListener() {
public void onNothingSelected(AdapterView<?> arg0) {
txtSpinner.setText("Nada foi selecionado!");
}
public void onItemSelected(AdapterView<?> parent,
View v, int position, long id) {
txtSpinner.setText(
(String) parent.getItemAtPosition(position));
}
});
MúlEplas
AEvidades

•  É
possível
desenvolver
múlEplas
aEvidades
na

mesma
aplicação.

•  Novas
aEvidades
são
declaradas
em

AndroidManifest.xml.

•  Usando
o
Eclipse,
pode‐se
escolher
qual
a

aEvidade
a
ser
lançada
no
emulador:

–  Run,
Run configuration…,
Launch.

AndroidManifest.xml
<applicaEon
android:icon="@drawable/icon"
android:label="@string/app_name">



<acEvity
android:name=".AulaAcEvity4"











android:label="@string/app_name">





<intent‐filter>









<acEon
android:name="android.intent.acEon.MAIN"
/>









<category
android:name="android.intent.category.LAUNCHER"
/>





</intent‐filter>



</acEvity>



<acEvity
android:name=".Gallery1"











android:label="@string/app_name">





<intent‐filter>









<acEon
android:name="android.intent.acEon.MAIN"
/>









<category
android:name="android.intent.category.LAUNCHER"
/>





</intent‐filter>



</acEvity>

</applicaEon>

Selecione a atividade aqui!!
Galerias
de
Imagens

Lista de fotos:
Crie uma galeria de imagens,
tal que seja possível escolher
alguma dentre as fotos
mostradas.
Cada vez que uma foto é
escolhida, seu índice na
galeria deve ser mostrado no
Toast do aparelho celular
Galerias

•  Android
possui
um
elemento
gráfico
que
se

presta
exatamente
ao
propósito
de
criar

galerias
de
imagens.

<?xml version="1.0" encoding="utf-8"?>
<Gallery
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
Inicialização
da
Galeria

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gallery_1);
Gallery g = (Gallery) findViewById(R.id.gallery);
g.setAdapter(new ImageAdapter(this));
g.setOnItemClickListener(
new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent,
View v, int position, long id) {
Toast.makeText(Gallery1.this, "" + position,
Toast.LENGTH_LONG).show();
}
O qu
} eée
); cl asse sta
Toas
} t?
Adaptadores

•  Adapter
é
um
padrão
de
projetos.

–  Aliás,
dos
mais
simples
que
existem.

•  Um
adaptador
faz
a
adequação
entre
duas

interfaces.

–  Quais
interfaces
precisam
ser
adaptadas,
em

nosso
caso?

Adaptadores
em
UML

ImageAdapter
public class ImageAdapter extends BaseAdapter {
public ImageAdapter(Context c) { ... }
public int getCount() { ... }
public Object getItem(int position) { ... }
public long getItemId(int position) { ... }
public View getView(
int position,
View convertView,
ViewGroup parent) { Como
i m p l em entar
...
e s t e a daptador?
}
}
ImageAdapter
public class ImageAdapter extends BaseAdapter {
public ImageAdapter(Context c) { ... }
public int getCount() { ... }
public Object getItem(int position) { ... }
public long getItemId(int position) { ... }
public View getView(
int position, Número de items representados
View convertView, pelo adaptador.
ViewGroup parent) {
... Visão que mostrará o objeto
} armazenado na dada posição.
} Objeto em uma certa posição
Atributos
de
EsElo

int mGalleryItemBackground;

private Context mContext;

public ImageAdapter(Context c) {
mContext = c;
TypedArray a = obtainStyledAttributes(R.styleable.Gallery1);
mGalleryItemBackground = a.getResourceId(
R.styleable.Gallery1_android_galleryItemBackground, 0);
a.recycle();
}
values/anrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="Gallery1">
<attr name="android:galleryItemBackground" />
</declare-styleable>
</resources>
A
lista
de
imagens

private Integer[] mImageIds = {
R.drawable.gallery_photo_1,
R.drawable.gallery_photo_2, R.drawable.gallery_photo_3,
R.drawable.gallery_photo_4, R.drawable.gallery_photo_5,
R.drawable.gallery_photo_6, R.drawable.gallery_photo_7,
R.drawable.gallery_photo_8 };

public int getCount() { return mImageIds.length; }

public Object getItem(int position) { return position; }

public long getItemId(int position) { return position; }


E
o
mais
importante…

public View getView(
int position,
View convertView,
ViewGroup parent
) {
ImageView i = new ImageView(mContext);
i.setImageResource(mImageIds[position]);
i.setScaleType(ImageView.ScaleType.FIT_XY);
i.setLayoutParams(new Gallery.LayoutParams(136, 88));
i.setBackgroundResource(mGalleryItemBackground);
return i;
}
Listas

•  Uma
das
visões
mais
uElizadas
são
as
listas.

–  Existe
uma
aEvidade
que
já
incorpora
o
layout
de

listas:
trata‐se
de
ListActivity.

public class List1 extends ListActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, mStrings));
getListView().setTextFilterEnabled(true);
}
private String[] mStrings = {"Alexia", "Bruna", "Carla",
"Daniele", "Erica", "Fernanda", "Glauberlaine",
"Heleonora", "Ivana", "Janete", "Kenia", "Luciana",
"Marta", "Norma", "Osma", "Patricia"};
}
Listas

•  Uma
das
visões
mais
uElizadas
são
as
listas.

–  Existe
uma
aEvidade
que
já
incorpora
o
layout
de

listas:
trata‐se
de
ListActivity.

public class List1 extends ListActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, mStrings));
getListView().setTextFilterEnabled(true);
}
private String[] mStrings = {"Alexia", "Bruna", "Carla",
"Daniele", "Erica", "Fernanda", "Glauberlaine",
"Heleonora", "Ivana", "Janete", "Kenia", "Luciana",
"Marta", "Norma", "Osma", "Patricia"};
}
Eventos
de
Listas

•  Uma
das
visões
mais
uElizadas
são
as
listas.

–  Existe
uma
aEvidade
que
já
incorpora
o
layout
de

listas:
trata‐se
de
ListActivity.


Adicione a
funcionalidade Discuta a
de remover estratégia
ua
elementos de s escolhida.
aplicação.

Será que essa estratégia pode ser


estendida no futuro?
Menu
de
Contexto

•  Menus
de
contexto

aparecem
em
Janelas
pop‐
up.

•  Podemos
aEvar
o
menu
de

contexto
de
uma
lista
se

clicarmos
sobre
um
de
seus

items
e
pressionarmos
o

ponteiro
durante
um
tempo.

•  Mas,
como
adicionar
um

menu
de
contexto
à
lista?

Menu
de
Contexto

private final int del = 1;

private List<String> mStrings = new ArrayList<String>();

public final void onCreateContextMenu(final ContextMenu menu,


final View v,
E c omo tratar o
final ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo); evento
menu.add(Menu.NONE, del, Menu.NONE, "DEL"); produzido pelo
} menu?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, mStrings));
registerForContextMenu(getListView());
getListView().setTextFilterEnabled(true); Stub para
initList();
} testes
Tratando
eventos
de
contexto

public final boolean onContextItemSelected(final MenuItem item) {
AdapterContextMenuInfo info =
(AdapterContextMenuInfo) item.getMenuInfo();
ListAdapter adapter = getListAdapter();
String e = (String) adapter.getItem((int) info.id);
switch (item.getItemId()) {
case del:
mStrings.remove(e);
fillData();
return true;
default:
return super.onContextItemSelected(item);
}
}
} Como é feita a amarração
entre evento escolhido e
evento tratado?
Estendendo
a
Aplicação

Múltiplos Eventos:
Adicione um evento “UP” para
mover o item selecionado
para a primeira posição da
lista.
Adicione um evento “DOWN”
para mover o item
selecionado para a última
posição da lista.
Programando
para
Interfaces

•  Uma
lista
baseada
em
arranjos
talvez
não
seja

a
melhor
opção
para
essa
nova
especificação.

–  Por
que?


private List<String> mStrings =


new ArrayList<String>();

•  O
que
seria
uma
opção
mais
adequada?

•  Qual
o
custo
de
fazer
a
mudança?

•  E
como
inserir
os
novos
eventos
no
menu?

MúlEplos
Eventos

public final void onCreateContextMenu(
final ContextMenu menu,
final View v,
final ContextMenuInfo menuInfo
) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(Menu.NONE, del, Menu.NONE, "DEL");
menu.add(Menu.NONE, up, Menu.NONE, "UP");
menu.add(Menu.NONE, down, Menu.NONE, "DOWN");
}
public final boolean onContextItemSelected(final MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo)
item.getMenuInfo();
ListAdapter adapter = getListAdapter();
String e = (String) adapter.getItem((int) info.id);
switch (item.getItemId()) {
case del:
mStrings.remove(e);
break;
case up:
mStrings.remove(e);
mStrings.add(0, e);
break;
case down:
mStrings.remove(e);
mStrings.add(e);
break;
default:
return super.onContextItemSelected(item);
}
this.setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, mStrings));
return true;
}
Mais
um
pouco
sobre
Layouts

•  Android
usa
layouts
para
controlar
a
aparência

das
aplicações.

•  Existem
vários
Epos
de
layouts:

–  FrameLayout
–  LinearLayout
–  TableLayout
–  AbsoluteLayout
–  RelativeLayout
–  etc

•  Para
que
serve
cada
um
desses
formatos?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http:// LinearLayout
schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="EditText1" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="EditText2" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="EditText3" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="EditText4" E basta mudar uma
/> linha para …
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http:// LinearLayout
schemas.android.com/apk/res/android"
android:orientation=”horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=”E1" />
<EditText
android:layout_width="fill_parent" O que significa
android:layout_height="wrap_content" esse “wrap_
android:text=”E2" />
<EditText content”?
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=”E3" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=”E4"
/>
</LinearLayout>
Pesos

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="EditText1"
android:layout_weight="1"/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="EditText2" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="EditText3"
android:layout_weight="0.5"/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="EditText4"
android:layout_weight="0.5"/>
Layouts
de
Tabela

•  Tabelas
permitem
que
componentes
gráficos

sejam
armazenados
em
linhas
e
colunas.


•  É
possível
determinar
o

peso
de
cada
item?

<?xml
version="1.0"
encoding="ut‐8"?>


<TableLayout
xmlns:android="hnp://schemas.android.com/apk/res/android"




android:id="@+id/tblJobs"



Tabelas:
exemplo





android:layout_width="fill_parent"






android:layout_height="wrap_content"






>







<TableRow












android:layout_width="fill_parent"












android:layout_height="wrap_content">








<Bunon
android:text="Cell
11"

 
<TableRow








android:id="@+id/btnCel11"

 









android:layout_width="fill_parent"








android:layout_width="wrap_content"

 









android:layout_height="wrap_content">








android:layout_height="wrap_content"

 





<Bunon
android:text="wrap_content"








android:layout_weight="2"/>

 





android:id="@+id/btnCo21"







/>
 





android:layout_width="100dip"








<TextView

 





android:layout_height="wrap_content"








android:id="@+id/txtCell12"

 





/>








android:layout_width="wrap_content"

 





<TextView








android:layout_height="wrap_content"

 





android:id="@+id/txtCell22"








android:text="Cell
12"

 





android:layout_width="wrap_content"








android:layout_weight="1"/>

 





android:layout_height="wrap_content"








/>

 





android:text="Cell
22"








<TextView

 





/>








android:id="@+id/txtCell13"

 





<TextView







android:layout_width="wrap_content"

 





android:id="@+id/txtCell23"








android:layout_height="wrap_content"

 





android:layout_width="wrap_content"








android:text="Cell
13"

 





android:layout_height="wrap_content"








android:layout_weight="1"/>

 





android:text="Cell
23"








/>

 





/>








<TextView

 





<TextView








android:id="@+id/txtCell14"

 





android:id="@+id/txtCell24"








android:layout_width="wrap_content"

 





android:layout_width="wrap_content"








android:layout_height="wrap_content"

 





android:layout_height="wrap_content"








android:text="Cell
14"

 





android:text="Cell
24"








android:layout_weight="1"/>

 





/>








/>

 




</TableRow>







</TableRow>

 </TableLayout>

Layouts
Absolutos

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android=
"http://schemas.android.com/apk/res/android" Como será a
tela dessa
android:orientation="vertical"
android:layout_width="fill_parent”
android:layout_height="fill_parent” > aplicação?
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Canto superior esquerdo"
android:layout_x="0.0px” android:layout_y="0.0px" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Meio"
android:layout_x="140.0px” android:layout_y="200.0px" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Canto superior direito"
android:layout_x="240.0px” android:layout_y="400.0px" />
</AbsoluteLayout>
Layouts
Absolutos

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent”
android:layout_height="fill_parent” >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
400.0 esquerdo"
E se desuperior
android:text="Canto
fô ssemos android:layout_y="0.0px" />
android:layout_x="0.0px”

para 4000.0?
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Meio"
android:layout_x="140.0px” android:layout_y="200.0px" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Canto superior direito"
android:layout_x="240.0px” android:layout_y="400.0px" />
</AbsoluteLayout>
Discussão

•  Quais
as
vantagens
de
um
layout
absoluto?

•  E
quais
as
desvantagens?

•  E
como
se
determinam
dimensões
em

Android?

<?xml
version="1.0"
encoding="u/‐8"?>


<RelaEveLayout
xmlns:android="h5p://schemas.android.com/apk/res/android"






android:orientaEon="ver?cal"






android:layout_width="fill_parent"






android:layout_height="fill_parent"






>

 •  É
possível
especificar
a

posição
de
um
elemento



<TextView






android:id="@+id/txtText1"






android:layout_width="wrap_content"






android:layout_height="wrap_content"






android:text="Text1"






android:gravity="top"


gráfico
com
relação
a





android:layout_alignParentRight="true"






/>

 outro,
usando
layouts

relaEvos.



<TextView






android:id="@+id/txtText2"






android:layout_width="wrap_content"






android:layout_height="wrap_content"






android:text="Text2"






android:layout_below="@+id/txtText1"






/>




<Bunon






android:id="@+id/btnBu5on1"






android:layout_width="150dp"






android:layout_height="wrap_content"






android:text="Bu5on1"






android:layout_below="@+id/txtText2"




/>



<Bunon






android:id="@+id/btnBu5on2"






android:layout_width="150dp"






android:layout_height="100dp"






android:text="Bu5on2"






android:layout_toRightOf="@+id/btnBu5on1"






android:layout_alignTop="@+id/btnBu5on1"




/>


</RelaEveLayout>


Layouts
RelaEvos

•  É
possível
especificar
a
posição
de
um

elemento
gráfico
com
relação
a
outro.

<TextView
android:id="@+id/txtText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text1"
android:gravity="top"
android:layout_alignParentRight="true"
/>
<Button
android:id="@+id/btnButton1"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:text="Button1"
android:layout_below="@+id/txtText2"
/>
Layouts
RelaEvos

•  É
possível
especificar
a
posição
de
um

elemento
gráfico
com
relação
a
outro.

<TextView
android:id="@+id/txtText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text2"
android:layout_below="@+id/txtText1"
/>
<Button
android:id="@+id/btnButton2"
android:layout_width="150dp"
android:layout_height="100dp"
android:text="Button2"
android:layout_toRightOf="@+id/btnButton1"
android:layout_alignTop="@+id/btnButton1"
/>
Incrementando
a
nossa
lista

•  Modifique
a
aEvidade
ListContext
para
que
seja
possível

mover
um
item
uma
posição
para
baixo.
O
úlEmo
item

não
pode
ser
movido,
mas
a
sua
aplicação
não
deve

parar
de
funcionar
se
o
usuário
tentar
movê‐lo.


You might also like