Saindo da zona de conforto… resolvi aprender android

Post on 14-Aug-2015

260 views 2 download

Transcript of Saindo da zona de conforto… resolvi aprender android

by Daniel Baccin

Saindo da zona de conforto… resolvi aprender Android !

Mas por que Android ???

Documentação excelente

Crescimento no número de apps

Fonte: http://www.statista.com/statistics/266210/number-of-available-applications-in-the-google-play-store/

Versões

Material Design

Resolvi aprender android !

Rápido resultado

336 !!!

Para tudo eu imagino um app

Primeiros desafios

Estrutura do Projeto

Classes JAVA

Estrutura do Projeto

Recursos

Estrutura do Projeto

AndroidManifest

Estrutura do Projeto

Gradle

Conceitos básicos

Activity Intent

AndroidManifest

XML de Layout

Conceitos básicos

Activity Intent

AndroidManifest

XML de Layout

Comportamento

public class FormularioActivity extends Activity{ @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.formulario);

// fazer coisas legais aqui }}

Activity

Comportamento

public class FormularioActivity extends Activity{ @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.formulario);

// fazer coisas legais aqui }}

Activity

Aparência

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal">

<ImageView android:id="@+id/icon_participante" android:layout_width="52px" android:layout_height="52px" android:src="@drawable/ic_action_accept"/> <TextView android:id="@+id/lista_aluno_nome" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="60px" android:textColor="@color/Black"/>

</LinearLayout>

XML de Layout

Aparência

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal">

<ImageView android:id="@+id/icon_participante" android:layout_width="52px" android:layout_height="52px" android:src="@drawable/ic_action_accept"/> <TextView android:id="@+id/lista_aluno_nome" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="60px" android:textColor="@color/Black"/>

</LinearLayout>

XML de Layout

Aparência

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal">

<ImageView android:id="@+id/icon_participante" android:layout_width="52px" android:layout_height="52px" android:src="@drawable/ic_action_accept"/> <TextView android:id="@+id/lista_aluno_nome" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="60px" android:textColor="@color/Black"/>

</LinearLayout>

XML de Layout

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

listaDeParticipantes = (ListView) findViewById(R.id.listParticipantes); listaDeParticipantes.setOnItemClickListener(this);

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fabAddParticipante); fab.attachToListView(listaDeParticipantes);

actionBar = getSupportActionBar(); if(actionBar!=null){ actionBar.setBackgroundDrawable(new ColorDrawable(0xFFFF4500)); actionBar.setTitle(R.string.lista_participantes); } }

Activity

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

listaDeParticipantes = (ListView) findViewById(R.id.listParticipantes); listaDeParticipantes.setOnItemClickListener(this);

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fabAddParticipante); fab.attachToListView(listaDeParticipantes);

actionBar = getSupportActionBar(); if(actionBar!=null){ actionBar.setBackgroundDrawable(new ColorDrawable(0xFFFF4500)); actionBar.setTitle(R.string.lista_participantes); } }

Activity

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

listaDeParticipantes = (ListView) findViewById(R.id.listParticipantes); listaDeParticipantes.setOnItemClickListener(this);

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fabAddParticipante); fab.attachToListView(listaDeParticipantes);

actionBar = getSupportActionBar(); if(actionBar!=null){ actionBar.setBackgroundDrawable(new ColorDrawable(0xFFFF4500)); actionBar.setTitle(R.string.lista_participantes); } }

Activity

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

listaDeParticipantes = (ListView) findViewById(R.id.listParticipantes); listaDeParticipantes.setOnItemClickListener(this);

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fabAddParticipante); fab.attachToListView(listaDeParticipantes);

actionBar = getSupportActionBar(); if(actionBar!=null){ actionBar.setBackgroundDrawable(new ColorDrawable(0xFFFF4500)); actionBar.setTitle(R.string.lista_participantes); } }

Activity

Activity

Activity

Activity

Activity

Activity

Activity

Conceitos básicos

Activity Intent

AndroidManifest

XML de Layout

public void abrirFormParticipante(View view){ Intent irParaFormulario = new Intent(this, FormularioParticipanteActivity.class); startActivity(irParaFormulario);}

Intent

Conceitos básicos

Activity Intent

AndroidManifest

XML de Layout

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="br.com.kenuiapps.palestra" >

<application android:allowBackup="true" android:icon="@drawable/java_ce" android:label="@string/app_name" android:theme="@style/AppTheme" >

<activity android:name=".activity.ListaParticipantesActivity" android:theme="@style/Theme.AppCompat.Light.DarkActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" />

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

<activity android:name=".activity.FormularioParticipanteActivity" android:theme="@style/Theme.AppCompat.Light.DarkActionBar"/>

</application></manifest>

AndroidManifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="br.com.kenuiapps.palestra" >

<application android:allowBackup="true" android:icon="@drawable/java_ce" android:label="@string/app_name" android:theme="@style/AppTheme" >

<activity android:name=".activity.ListaParticipantesActivity" android:theme="@style/Theme.AppCompat.Light.DarkActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" />

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

<activity android:name=".activity.FormularioParticipanteActivity" android:theme="@style/Theme.AppCompat.Light.DarkActionBar"/>

</application></manifest>

AndroidManifest

Mais conceitos...

Adapter SQLite DAO Test

Mais conceitos...

Adapter SQLite DAO Test

@Overrideprotected void onResume() { super.onResume(); List<Participante> participantes = obtemListaDoBanco();

ListaParticipantesAdapter adapter = new ListaParticipantesAdapter(this, participantes);

listViewDeParticipantes.setAdapter(adapter);}

Adapter

public class ListaParticipantesAdapter extends BaseAdapter { private Activity activity; private List<Participante> participantes;

public ListaParticipantesAdapter(Activity activity, List<Participante> participantes) { this.activity = activity; this.participantes = participantes; } ...}

Adapter

public class ListaParticipantesAdapter extends BaseAdapter { private Activity activity; private List<Participante> participantes;

public ListaParticipantesAdapter(Activity activity, List<Participante> participantes) { this.activity = activity; this.participantes = participantes; } ...}

Adapter

@Override

@Override

public View getView(int position, View convertView, ViewGroup parent) {

View linha = activity.getLayoutInflater().inflate(R.layout.lista_participantes, null); Participante participante = participantes.get(position);

TextView textViewNome = (TextView) linha.findViewById(R.id.lista_nome); textViewNome.setText(participante.getNome());

...}

Adapter

@Override

@Override

public View getView(int position, View convertView, ViewGroup parent) {

View linha = activity.getLayoutInflater().inflate(R.layout.lista_participantes, null); Participante participante = participantes.get(position);

TextView textViewNome = (TextView) linha.findViewById(R.id.lista_nome); textViewNome.setText(participante.getNome());

...}

Adapter

textViewNome

Mais conceitos...

Adapter SQLite DAO Test

public class DataBaseHelper extends SQLiteOpenHelper {

public static final String BANCO_DADOS = "Palestra"; private static int VERSAO = 1;

public DataBaseHelper(Context context) { super(context, BANCO_DADOS, null, VERSAO); }

SQLite

@Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE participante"+ " ( _id INTEGER PRIMARY KEY," + " nome TEXT," + " telefone TEXT," + " email TEXT," + " presente INTEGER, " + " tamanhoBlusa INTEGER" + " );" ); }

SQLite

@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

String dll = "DROP TABLE IF EXISTS participante"; db.execSQL(dll); this.onCreate(db); }

SQLite

Mais conceitos...

Adapter SQLite DAO Test

public class ParticipanteDAO{

private DataBaseHelper helper; private SQLiteDatabase db;

public PalestraDAO(Context context){ helper = new DataBaseHelper(context); }

public SQLiteDatabase getDb() { if (db == null) { db = helper.getWritableDatabase(); } return db; }

DAO

public class ParticipanteDAO{

private DataBaseHelper helper; private SQLiteDatabase db;

public PalestraDAO(Context context){ helper = new DataBaseHelper(context); }

public SQLiteDatabase getDb() { if (db == null) { db = helper.getWritableDatabase(); } return db; }

DAO

public class ParticipanteDAO{...

public long salva(Participante participante) { ContentValues values = participante.getContentValues(); return getDb().insert(DataBaseHelper.Participante.TABELA, null, values); }....

DAO

public ContentValues getContentValues() {ContentValues values = new ContentValues();

values.put(DataBaseHelper.Participante.ID, getId());values.put(DataBaseHelper.Participante.NOME, getNome());...return values;

}

DAO

Mais conceitos...

Adapter SQLite DAO Test

public class ParticipanteDAOTest extends AndroidTestCase {

public void testInsertDb() { ParticipanteDAO dao = new ParticipanteDAO(mContext); long qtdDeLinhasInseridas = dao.salva(dadoUmParticipante()); assertTrue(qtdDeLinhasInseridas>0); }}

Test

public class ParticipanteDAOTest extends AndroidTestCase {

public void testInsertDb() { ParticipanteDAO dao = new ParticipanteDAO(mContext); long qtdDeLinhasInseridas = dao.salva(dadoUmParticipante()); assertTrue(qtdDeLinhasInseridas>0); }}

Test

Novidades Google I/O 2015

Internet das coisas

Tecido sensivel ao toque

Android Pay

Android Development Tools

Android Development Tools

Futuro???

Onde buscar o conhecimento?

●Getting Started●Google+ & Udacity●Alura●Comunidades no Google+●Grupos Google●Java CE●Stack overflow

Referências

● http://www.androidcentral.com/android-50-lollipop-now-33-percent-devices● http://www.android.com/play/● http://developer.android.com/about/dashboards/index.html● http://www.google.com/design/spec/material-design/introduction.html● https://developer.android.com/guide/index.html● http://gizmodo.uol.com.br/google-brillo-weave/● http://gizmodo.uol.com.br/android-pay-oficial/● http://gizmodo.uol.com.br/android-m-oficial/● http://olhardigital.uol.com.br/noticia/google-lanca-tecnologia-de-tecido-sensivel-ao-toque/48855● http://info.abril.com.br/noticias/ti/2015/05/google-e-udacity-lancam-serie-completa-de-cursos-sobre-desenvolvimento-em-android.shtml● https://dariomungoi.wordpress.com● http://tudoandroid.net.br/googles-material-design-wins-award-best-contribution-ux/● http://robovm.com/google-io-summary-whats-new-in-android-development-tools/● http://www.androidcentral.com/

● http://careers.stackoverflow.com/jobs/tag/android

Go Developers!!!

daniel.baccin@gmail.comhttps://bitbucket.org/danielbaccinhttps://github.com/danielbaccin/Palestrahttp://www.slideshare.net/baccin