Busca

Mark Vasconcelos Creative Solutions

Teaching & Learning

Tag

techs

Simpliest way to implement android.os.Parcelable and Parcelable.Creator trought Json converter library / Maneira mais simples de implementar Parcelable no Android

Caros, segue solução mais simples possível que encontrei para implementar Parcelable no Android (Obs.: Post em inglês).

I recently found a simple solution to implement the android.os.Parcelable interface (and Creator) on Android trought the usage of Gson library API.

The solution is to write one string and read one string from the Parcels at writeToParcel/readFromParcel with the results from Gson.toJson and Gson.fromJson

The resulted code doesn’t requires methods reading every item from parcels, and the model class doesnt need constructors too.

A sample is implemented in the following model:

class User {
long id;
String login;
String pass;

/**
* @param dest
* Writes String Gson.toJson(this) into 'dest'
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(new Gson().toJson(this));
}
public transient static final Parcelable.Creator<User> CREATOR = new Creator<User>() {
/**
* @param source
* @return read string from 'source' as Gson
*/
@Override public User createFromParcel(Parcel source) {
return new Gson().fromJson(source.readString(), User.class);
}

@Override public User[] newArray(int size) { return new User[size]; }};

@Override public int describeContents() { return 0; }
}

PS: Sorry the try of making the relevants part of code clearly by this formatation.

 

😉

[]’s

#CaféComJava – Android Presentation

Finalmente fiz upload dos slides que usei na minha apresentação no Café com Java de agosto na Caelum.

Fiz o upload no SlideShare e pode ser acessado através desse link.

Titulo: Android Overview
Conteudo: Uma visão geral da plataforma Android junto com codigos simples de exemplo.

Android – Views – pt. 1

O Android conta com várias Views por padrão, e neste artigo exploraremos algumas delas.

Uma View é similar a um JComponent, é um item que pode ser adicionado a tela onde o usuario poderá ver e interagir com ele.

Este artigo cobre apenas como criar esses elementos via XML, que é de longe a maneira mais fácil para lidar com telas.

Para continuarmos, vamos criar um projeto com os seguintes parametros:

Target: 2.1
Application Name: ViewsExample
Package Name: br.techs
Create Activity: MainActivity
Min SDK Version: 7

Views

Todas as tags de Views no Android tem suporte ao atributo id, é com ele que conseguimos acessar nossa tela após inflá-la.
As declarações de novos ids devem começar com ‘@+id/’ e depois disso demos o valor que vai ser o id.
Ex:

<TagQualquer android:id="@+id/iddesejado" />

TextView

Sempre que escolhemos a opção “Create Activity” quando estamos criando um projeto, o ADT se encarregará de criar uma classe e um main.xml que é simplesmente um TextView com as palavras “Hello World!” escritas.

O TextView é usado para exibir texto para o usuario, assim como o JLabel do Swing. Podemos controlar sua aparência e tamanho pelo XML, basta modificar os atributos na tag TextView, alguns desses atributos são:

  • android:text: valor será o texto do componente;
  • android:textColor: O valor da cor no formato ‘#RRGGBB’ em hexadecimal, é a cor do texto;
  • android:textSize: Tamanho da fonte, deve ser indicado em px, ex: ’12px’;
  • android:textStyle: Style do texto (bold, italic);
  • android:background: Uma cor no formato #RRGGBB ou um drawable;

Alguns atributos são valores pré-defenidos como os do android:textStyle, mesmo assim, ainda é possivel usar mais de um valor no atributo, é aqui que entra o operador pipe “|”.
Por exemplo, se quisermos o texto em negrito usamos “bold”, em itálico usamos o valor “italic”, mas se quisermos que o texto seja negrito+itálico, podemos usar o pipe juntando os dois: “bold|italic”.

Modificamos nosso main.xml para testar estes atributos.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="match_parent"
	android:layout_height="match_parent">
	<TextView android:id="@+id/textView"
		android:layout_width="match_parent"
		android:layout_height="wrap_content"
		android:text="Hello Views!"
		android:textSize="28px"
		android:textColor="#12FF88"
		android:textStyle="italic|bold"
	/>
</LinearLayout>

E agora, rodando nossa atividade já podemos ver o seguinte:

EditText

Enquanto o TextView exibe texto como um JLabel, quem oferece ao usuário um campo para ele colocar texto é o EditText (assim como o JTextField) que é filho de TextView.
Este componente não declara nenhum atributo XML novo, mas usa os do TextView, a diferença é que ele realmente permite edição.

Para tornar ele editável ou não, usamos o atributo android:editable com true ou false (true é o default). O TextView mesmo com true não permite edição.

Button

É um simples botão com algo escrito assim como o JButton. É através deles que o usuario sabe que alguma ação será realizada quando clicar.

Modificando nosso main.xml para testar esses componentes.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="match_parent"
	android:layout_height="match_parent">
	<TextView android:id="@+id/textView"
		android:layout_width="match_parent"
		android:layout_height="wrap_content"
		android:text="Hello Views!"
		android:textSize="28px"
		android:textColor="#12FF88"
		android:textStyle="italic|bold" />
	<EditText android:id="@+id/editView"
		android:layout_width="match_parent"
		android:layout_height="wrap_content"
		android:text="..."
		android:textSize="28px"
		android:textColor="#12FF88"
		android:textStyle="italic|bold" />
	<Button android:id="@+id/button"
		android:layout_width="match_parent"
		android:layout_height="wrap_content"
		android:text="Click!"
		android:textSize="28px"
		android:textColor="#12FF88"
		android:textStyle="italic|bold" />
</LinearLayout>

Notaram alguma semelhança?

Isso por que Button e EditText estendem TextView e compartilham os atributos de texto.

E o resultado da nossa tela até agora é o seguinte:

CheckBox

É um botão que permite ao usuario alternar entre as opções marcado/desmarcado.

Ele também estende TextView, e o valor atribuido em ‘android:text’ é o texto visivel ao lado do CheckBox.

ToggleButton

ToggleButton são botões como o CheckBox, mas indicam marcado/desmarcado com uma ‘luz’ invés do efeito de desenho de um “tick”.
O atributo ‘android:text’ não tem efeito nesse componente, por padrão o texto é alternado entre ON e OFF, sendo possivel usar os atributos como color, style, size e etc.. para modificar a aparencia desse texto.
Esse componente tem dois atributos a mais para sua tag.

  • android:textOn: O texto que será exibido quando estado for ON
  • android:textOff: O texto que será exibido quando estado for OFF

RadioButton

São botões como o CheckBox que permitem marcá-lo, mas não é possivel desmarcá-lo.
Para se obter o efeito de seleção unica, é necessario adicionar eles dentro de um RadioGroup.

E o nosso XML final:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical"
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="match_parent" android:layout_height="match_parent">
	<TextView android:id="@+id/listView" android:layout_width="match_parent"
		android:layout_height="wrap_content" android:text="Hello Views!"
		android:textSize="28px" android:textColor="#12FF88" android:textStyle="italic|bold" />
	<EditText android:id="@+id/textView" android:layout_width="match_parent"
		android:layout_height="wrap_content" android:text="..."
		android:textSize="28px" android:textColor="#12FF88" android:textStyle="italic|bold" />
	<Button android:id="@+id/button" android:layout_width="match_parent"
		android:layout_height="wrap_content" android:text="Click!"
		android:textSize="28px" android:textColor="#12FF88" android:textStyle="italic|bold" />
	<CheckBox android:id="@+id/check" android:layout_width="match_parent"
		android:layout_height="wrap_content" android:text="Check it!"
		android:textSize="28px" android:textColor="#12FF88" android:textStyle="italic|bold" />
	<ToggleButton android:id="@+id/tbutton"
		android:layout_width="match_parent" android:layout_height="wrap_content"
		android:textOn="Ligado" android:textOff="Desligado" android:textSize="28px"
		android:textColor="#12FF88" android:textStyle="italic|bold" />
	<RadioGroup android:layout_width="match_parent"
		android:layout_height="wrap_content">
		<RadioButton android:id="@+id/r1button"
			android:layout_width="match_parent" android:layout_height="wrap_content"
			android:text="Opção 1" android:textSize="28px" android:textColor="#12FF88"
			android:textStyle="italic|bold" />
		<RadioButton android:id="@+id/r2button"
			android:layout_width="match_parent" android:layout_height="wrap_content"
			android:text="Opção 2" android:textSize="28px" android:textColor="#12FF88"
			android:textStyle="italic|bold" />
	</RadioGroup>
</LinearLayout>

Note que todos eles tem os atributos do TextView, tornando fácil personalizá-los.

E o resultado final da nossa aplicação é como a seguinte:

PS:
Para facilitar, indiquei aqui para criar um novo projeto para esse artigo. Mas o código original está no projeto AndroidTechs, e a nossa MainActivity lá é a ViewActivity e o main.xml é a views.xml.

Esse é o primeiro artigo sobre Views, aqui apresentei apenas as mais comuns para um programa Android, guardarei umas Views mais interessantes para depois. 😉

Hello (again) comunidade Java!

Criei esse blog para dividir os assuntos que eu fazia no meu principal (http://markyameba.wordpress.com)

Já que pretendo postar mais coisas não relacionadas a TI e ao mesmo tempo mais relacionadas a TI, não fazia sentido manter tudo em um lugar só.

Então sobre projetos, novidades e artigos relacionados a TI serão colocados aqui.

Enquanto não termino de migrar tudo, por que não dar uma olhadinha nos projetos que tenho?

https://github.com/MarkyVasconcelos

Eles são

Towel – Projeto com utilidades para Swing e para Java SE.

TDGame – Jogo de Tower Defence feito com Java2D.

AndroidGameFramework – Versão do Java Game Framework do ViniGodoy que irei portar para Android

So.. Hello comunidade Java!

Towel v1.0!

Bem, agora com o projeto com um novo nome(veja motivo aqui).

Estou lançando a nova versão sob este novo nome, e como novidades temos o seguinte:

1° Todos os packages foram renomeados de mark.utils. para com.towel.
2° Foi adicionado a classe TableFilter(Auto-Filtro) criado pelo ViniGodoy no package com.towel.swing.table.
3° Foi adicionado a classe JImagePanel criado pelo ViniGodoy no package com.towel.swing.img.

Em breve escreverei um artigo sobre isso.

E é isso, acessem a página Towel Project para ver como baixar a versão atualizada do projeto.

Blog no WordPress.com.

Acima ↑