Saindo da zona de conforto… resolvi aprender android
-
Upload
daniel-baccin -
Category
Mobile
-
view
260 -
download
2
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!!!
[email protected]://bitbucket.org/danielbaccinhttps://github.com/danielbaccin/Palestrahttp://www.slideshare.net/baccin