PlataformasMobile
Introdução
Celularesacadaanovemcrescendotantoemnumero quantoemqualidadeetecnologia.Comesseavanço tecnológicohojeépossívelterdetudoemumúnico aparelhomóvelcomo:CâmeraDigital,Bluetooth, Jogos,GPS,AcessoaInternet,lere-mailsTVdigital. Jogos,GPS,AcessoaInternet ,lere-mailsTVdigital.
Introdução
Eparaacompanharessemercadoqueestaatodo vapor,empresasdaaltatecnologiainvestempesado vapor,empresasdaaltatecnologiainvestempesado nodesenvolvimentodeplataformaslivres,flexíveis, quetenhamgrandeevoluçãotecnológica. Ecomonessemercadoinovadorsempretemuma grandeempresachamandoaatenção,dessavezfoia Googlequemchamouaatençãocomolançamentodo Android,suanovaplataformaparadispositivos Android,suanovaplatafor maparadispositivos móveis.
OqueéAndroid?
Androidéumaplataformaparadispositivosmóv Androidéumaplataformaparadispositivosmóveis eis desenvolvidapelaGoogleecontêmumsistema operacionalbaseadoemLinux. Contémumainterfacericacomdiversosaplicativos instalados.Fácildeserutilizadocomtudoqueáde maisnovonomercadoparadispositivosmóveis. PossibilitaautilizaçãodalinguagemJavaparao desenvolvimentodeaplicativosAndroid.
EvoluçãoAndroid
1.5 Cupcake
2.3 Gingerbread
EvoluçãoAndroid
3.x - Honeycomb
EvoluçãoAndroid
4.0 - Ice Cream Sandwich
4.1 - Jelly Bean
OpenHandsetAlliance
OHAéumgrupoformadopelasgrandesempresasde telefonialideradospeloGoogle.Essegrupotemo objetivodedefinirumaplataformaaberta,modernae flexívelparaodesenvolvimentodeaplicações coorporativas.
Códigoabertoelivre?!?!?
Essaéaumadasgrandesnovidadesdaplataforma. Androidéaprimeiraplataformaparaaplicações Androidéaprimeiraplataformaparaaplicações móveiscompletamentelivredecódigoaberto. Programadorespodembaixarefazermelhorias,assim comoempresasnãoterãocustosemutilizara plataformaemseusdispositivoseaindapodem personalizardaformaquequiseremsemprecisar compartilharestasalterações.
ArquiteturaAndroid
SDKAndroid
Alémdemanteraplataforma,aGoogletambém Alémdemanteraplataforma,aGoogletambém disponibilizaumSDKparaodesenvolvimentode aplicaçõesparaoAndroid. ComSDKdisponívelalinguagemutilizadanadamais nadamenosqueafamosalinguagemJAVA. Googletambémdisponibilizouumpluginparao EclipsechamadoADT(AndroidDevelopmentTools) parafacilitarnodesenvolvimentodeaplicativospara Android.
MáquinaVirtualDalvik
AndroidnãoutilizaamaquinavirtualJava(JVM),e AndroidnãoutilizaamaquinavirtualJava(JVM),e siméutilizadoamaquinavirtualDalvik. Depoisqueosbytecode(.class)sãocompiladosos mesmosãoconvertidosparaoformato.dex(Dalvik Executable)quenadamaiséqueumaaplicação Androidcompilada. Depoisdacompilaçãoégeradoumarquivo.apk (AndroidPackageFile)quecompactaarquivos compilados.dexerecursosutilizadospelopróprio desenvolvedor.
http://developer.android.com
Configurandoambientede Desenvolvimento
Parainiciaraconfiguraçãodoambientede desenvolvimentoénecessáriobaixaroSDK.
http://developer.android.co http://develop er.android.com/sdk/index. m/sdk/index.html html
AIDEutilizadaseráoEclipse. AIDEutilizadaseráoEclips e.
http://www.eclipse.org/d http://www .eclipse.org/downloads/ ownloads/
InstalandooSDK
ApósfazerodownloaddoSDK,bastadescompactar ApósfazerodownloaddoSDK,bastadescompactar emqualquerdiretóriodosistemaoperacional(Neste exemplofoiutilizadoowindows).
Ex.:C:\android-sdk-
-_
DentrodoSDKexisteumapastachamadatoolsque contémvariasferramentaseoemuladorAndroid.
InstalaçãodopluginADTparao Eclipse
AbraoEclipseeacessoomenuHelp/InstallNew AbraoEclipseeacessoomenuHelp/InstallNew Software. Software. NocampoWorkwithincluaolink
https://dl-ssl.google.com/andr https://dl-ssl.go ogle.com/android/eclipse/ oid/eclipse/
Apósincluirolink,clicarnobotãoAdd.. Apósincluirolink,clicarnobotãoAdd
InstalaçãodopluginADTparao Eclipse
InstalaçãodopluginADTparao Eclipse
NaJanelaAddSiteinformeumnomeparaolink adicionadoecliqueemOKparaconfirmar.
InstalaçãodopluginADTparao Eclipse
Apósainclusão,selecioneopluginaserinstaladoe Apósainclusão,selecioneopluginaserinstaladoe clicaremNext....Next.
InstalaçãodopluginADTparao Eclipse
AceitarostermosdeinstalaçãoeclicaremFinish. AceitarostermosdeinstalaçãoeclicaremFinish. Logoapósiráiniciarodownloaddoplugin.
InstalaçãodopluginADTparao Eclipse
ApósainstalaçãodoADTénecessárioconfigurá-lo ApósainstalaçãodoADTénecessárioconfigurá-lo parautilizaroSDKquefoiinstalado.
ConfigurandoADT
ParaconfiguraroADTentrenomenu Window/ Window/ Preferenceseselecionaraopção Preferenceseselecionaraopção Android.Clique Android.Clique emOKparaconfirmar.
ConfigurandoADT
ComADTinstaladoeconfiguradojáépossívelutilizar asferramentasoferecidaspeloplugin,oemuladore principalmenteiniciarodesenvolvimentode aplicativosAndroid.
ConfigurandoEmulador
Parautilizaroemulador,énecessárioantesincluiro AVD(AndroidVirtualDevice)comTARGETda AVD(AndroidVirtualDevice)comTARGETda versãodesejadadoSDKoucomrecursosespecíficos versãodesejadadoSDKoucomr ecursosespecíficos Ex.:GoogleMaps. Apartirdaversão1.5doSDKcomeçouavirembutid Apartirdaversão1.5doSDKcomeçouavirembutido o aversãoanterior.Comoestamosutilizandoaversão 1.6veiojuntoaoSDKaversão1.5.Issoéútilpara aplicaçõessuaqueaindautilizamaversãoanteriore nãoseadaptaramaversãomaisatualizada.
ConfigurandoEmulador
ParacadastrarumAVDnovoacesseomenu Windows/AndroidSDKa Windows/AndroidSDKandADVMana ndADVManager. ger.Logo Logo apóscliquenobotãoNEW apóscliquenobotãoNEW .
ConfigurandoEmulador
NainclusãodoAVDinformeumanomeparao mesmoeescolhaaTARGETdaversãoatualdoSDK. CliqueemCreateAVDparaconcluir.
IniciandoEmulador
ApóscadastrarselecioneoAVDcadastradoeclique ApóscadastrarselecioneoAVDcadastradoeclique emSTARTparainiciaroEmulador.
Emulador
Estadisponívelnoemuladoramaioriadosrecursos queumcelularfísicopossui.Desdebrowser,contacts, Message,E-mailemuitomais.
Emulador
DemonstraçãodeBrowser
PrimeiroProjeto
Nesteprimeiroexemploserádemonstradocomose criaumprojetonoEclipse,aestruturadediretóriose arquivospadrõesutilizadosemumprojetoAndroid.
CriandoProjeto
Paracriarumprojeto,cliquenomenuFile/New/ Paracriarumprojeto,cliquenomenuFile/New/ Project.Selecione Project.Selecione AndroidProject AndroidProjectecliqueem ecliqueem Next.
CriandoProjeto
Napróximatelaseráexibidososseguin Napróximatelaseráexibidososseguintescampos: tescampos:
ProjectName:Nomedoprojetoqueserácriado. ProjectName:Nomedoprojetoqueserácriado. BuildTarget:PodeserselecionadoqualversãodoSDKque BuildTarget:PodeserselecionadoqualversãodoSDKque esseprojetoiráutilizar,nonossocasoirem esseprojetoiráutilizar,nonossocasoiremosusaraTarget osusaraTarget Android1.6. Seráotitulodaaplicação.Essetitulo ApplicationName: ApplicationName:Seráotitulodaaplicação.Essetitulo apareceráquandoaaplicaçãoforinstalada apareceráquandoaaplicaçãoforinstaladanoemulador. noemulador. PackageName:NomedoPacoteemqueaactivityprincipal PackageName:NomedoPacoteemqueaactivityprincipal faráparte.Importequeessenomesejaúnicopara identificaçãodamesma. CreateActivity:Nomedaactivityprincipalqueservirá CreateActivity:Nomedaactivityprincipalqueservirá comopontoinicialdaaplicação.Um comopontoinicialdaaplicação.Umaaplicaçãopodet aaplicaçãopodeter er umaouváriasactivitiesquerepresentamastelasdeuma aplicação.
CriandoProjeto
EstruturadoProjeto
EssaéaestruturadeumprojetoAndroid.
EstruturadoProjeto
src:PastaquecontemasclassesJavadoprojeto. src:PastaquecontemasclassesJavadoprojeto. assets:Estediretórioguardaarquivosopcionaisdo assets:Estediretórioguardaarquivosopcionaisdo projetocomoporexemplobibliotecasdeterceiros. res:Diretórioqueguardaosrecursosdaaplicaçãoque res:Diretórioqueguardaosrecursosdaaplicaçãoque são:
uecomimagensdaaplicação. sdaaplicação. drawable:Diretórioq drawable:Diretórioquecomimagen layout:ContémosarquivosXMLparaacriaçãode layout:ContémosarquivosXMLparaacriaçãode layoutsdastelasdaaplicação. values:ContémosarquivosXMLusadosparaa values:ContémosarquivosXMLusadosparaa internacionalizaçãodaaplicaçãoeconfigurações.
ArquivosdoProjeto
/res/layout/main.xml
Essearquivodefineainterfacegráficadatela.Por padrãonacriaçãodoprojetoécr padrãonacriaçãodoprojetoécriadoum > paraexibirumamensagemdetexto.Amensagemé buscadacomoreferencianoatributo ,utilizandoachave android:text=“@string/hello”,utilizandoachave android:text=“@string/hello” hellolocalizadanoarquivo hellolocalizadanoarquivostrings.xml strings.xml.. Podersercriadooutrosarquiv Podersercriadooutrosarquivosxmldelayouts. osxmldelayouts.Ao Ao incluirumnovolayoutnodiretório/res/layout/ incluirumnovolayoutnodiretório /res/layout/ automaticamenteserácriadoumareferêncianaclasse R.java. R.java.
ArquivosdoProjeto
/res/layout/main.xml
ArquivosdoProjeto
/res/values/strings.xml
Estearquivocontemasmensagensdaap Estearquivocontemasmensagensdaaplicações.Todo licações.Todos s ostextossãolocalizadosnestearquivo,ecadaumtem seuidentificador@string/chave seuidentificador@string/chave..
ArquivosdoProjeto
AclasseR.java AclasseR.javatemconstantesquereferenciamos temconstantesquereferenciamos recursoslocalizadosnapastares recursoslocalizadosnapasta resdoprojeto,como doprojeto,como porexemploasmensagensdefinidasnoarquivo strings.xml.Todasasvezesqueumrecursoé strings.xml.Todasasvezesqueumrecursoé atualizadoouadicionadoaclasseR.java atualizadoouadicionadoaclasse será R.javaserá atualizadaautomaticamentecomreferenciaaesse recurso. ESTACLASSENÃOPODESERALTERADA MANUALMENTE!!!!
ArquivosdoProjeto
ClasseR. ClasseR.
ArquivosdoProjeto
AndroidManifest.xml AndroidManifest.xml
Esteéoarquivoprincipaldaap Esteéoarquivoprincipaldaaplicaçãoeresponsável licaçãoeresponsável pelaconfiguraçãodoprojetoco pelaconfiguraçãodoprojetocomoporexemp moporexemplo: lo: Inclusãodaactivityprincipaledetodasasactivities, iconedaaplicação,nomedaaplicaç iconedaaplicação,nomedaaplicação,entreinúmeras ão,entreinúmeras configurações.
AcNvity
Nacriaçãodoprojetoégeradoautomaticamenteuma classequerepresentaatela( Activity )principaldoprojeto. Activity )principaldoprojeto. Éestaclassequeseráatelainicial.Masnãoimpedede fazeresseprocessomanualmenteutilizandooarquivo AndroidManifest.xml AndroidManifest.xml Paracadatelacriadaparaaplicaçãodeveráserfilhada classeandroid.app.Activity. classeandroid.app.Activity.CadaActivityéresponsável CadaActivityéresponsável porcontrolaroestado,eventosd porcontrolaroestado,eventosdatelaedefinirqualView atelaedefinirqualView seráresponsávelpordesenharainterfacegráficado usuário. Aoherdarde Activityseránecessárioimplementaro Activityseránecessárioimplementaro métodoonCreate(bundle) métodoonCreate(bundle)ondeomesmoéchamado ondeomesmoéchamado automaticamentequandoaActivityécriada.
AcNvity
MétodosetContentView(view) MétodosetContentView(view)informandoa informandoa constanteR.layout.main constanteR.layout.main,fazcomqueaview ,fazcomqueaview definidanoarquivoXMLsejaexibida.
AndroidManifest
ÉobrigatórioquecadaActivitydoprojetoesteja declaradanoarquivoAndroidManifest.xml.
ParaaActivityqueseráopontodepartidadoprojeto deveráserdeclaradadaseguinteforma:
AndroidManifest
Tagcustomizacomoaactivityserá iniciada. AaçãoMAINsignificaqueaactivity “PrimeiroExemploActivity”podeseriniciada isoladamente,comopontoinicialdaaplicação.
AcategoriaLAUCHERindicaqueaactivityestará AcategoriaLAUCHERindicaqueaactivityestará disponivélnatelainicialjuntocomoutrasaplicações.
ExecutandoProjeto
ParaexecutarumprojetoAndroidnoemulador, cliquecomobotãodireitonoprojeto,selecioneo menuRunas/AndroidApplication menuRunas/AndroidApplication..
AcNvity/CiclodeVida
OspossíveisestadosdeumaActivitysão:
Executando,Temporariamentein Executando,Temporariamenteinterrompidaem terrompidaem segundoplanooucompletamentedestruida.
CadaActivityiniciadaéinseridanotopodapilha, chamadade“activitystack”.Entãoseumanova activityéiniciadaaqueestavaemexecuçãofica abaixodanova. Seumaactivityestivernoestadodepausada,o sistemaoperacionalpodedecidirencerraroprocesso. Umexemplotípicoseriaparaliberarrecursose memóriaparaoutrasaplicações.
AcNvity/CiclodeVida
AcNvity/Recuperandoobjetos
QuandoconstruímostelasusandoarquivosXMLde layout,surgeanecessidaderecuperarosobjetos definidosnoarquivodentrodocodigo-fonte.Como porexemplo:RecuperarumImageView porexemplo:Recuperarum quando ImageViewquando pretendemosdefinirumaimagem,entreoutros. OExemploaseguiradicionamosatag OExemploaseguiradicionamosatag noarquivodelayoutqueserveparaexibiruma imagemnatela.Foidefinidoalémdalarguraealtura o“id” o“id”queservirápararecuperarmoso queservirápararecuperarmosoImageView ImageView emtempodeexecução.
AcNvity/Recuperandoobjetos
Paradefinirum“id”foiadicionadooatributo android:id=“@+id/imagem”natag android:id=“@+id/imagem” natag ..
AcNvity/Recuperandoobjetos
NaclasseRéexibidooiddefinidonoarquivode layout.Issotudoéfeitoautomaticamentequandoas modificaçõessãofeitasnoarquivoXML.
AcNvity/Recuperandoobjetos
AgorabastautilizarométodofindViewById(id)para AgorabastautilizarométodofindViewById(id) para recuperarmosobjetosdefinidonoarquivoXML.
AcNvity/Recuperandoobjetos
Exercício1:
CrieumprojetoAndroidedefi CrieumprojetoAndroidedefinaemseulayoutdois naemseulayoutdois componentesTextVieweumImageView. Paracadacomponentedefinaum“id”. Naactivityprincipalrecupereambo Naactivityprincipalrecupereamboscomponentes scomponentes utilizandoométodofindViewById(id) utilizandoométodofindViewById(id).. ParaocomponenteImageView,in ParaocomponenteImageView,incluaumaimagemde cluaumaimagemde suaescolha(Nãoesqueçadeincluiroarquivode imagemnodiretóriopadrão). ParaocomponenteTextView,m ParaocomponenteTextView,modificarseutexto. odificarseutexto.
AcNvity-avegação
ParafazeranavegaçãoentreActivitiesénecessário utilizarométodostartActivity(Intent) Intentséusadonaintençãodeexecutaralgo.Esse objetoencapsulaqualseráaintenção,intenção informadanomomentoemqueforcriadauma instanciadaIntent.Paraesteexemploiremosutilizar aIntentparaabrirumaoutra Activity Activity.
AcNvity–Passandovalorespara umaAcNvity
Utiliza-seapropriaIntentparapassarvaloresparaa Activityqueseráaberta. IntentcontémmetódosdeHashMap.Ondeé informadoachave+valor .EnaActivityqueserá .EnaActivityqueserá abertapode-serecuperaressevaloratravésdamesma chave.
AcNvity–Passandovalores paraumaAcNvity • Definindo parâmetro : Intent intent = new Intent(this, Int ent(this, MinhaActivity.class); MinhaActivity.class); Bundle bundle = new Bundle(); bundle.putString("meu_valor", "Valor"); "Valor"); intent.putExtras(bundle); startActivity(intent);
• Recuperando Intent intent = getIntent(); Bundle bundle = intent.getExtras(); String value = bundle.getString("meu_valor");
ListAcNvity
Activityqueexibeumalistacomitens.Internamente Activityqueexibeumalistacomitens.Internamente essaActivityutilizaumListView essaActivityutilizaumListView,assimnãoprecisa ,assimnãoprecisa criarumlayoutcontendoumListView criarumlayoutcontendoum .Entãonão ListView.Entãonão precisachamarsetContentView. precisachamarsetContentView. ParautilizaraListActivityéprecisoestenderde android.app.ListActivity. Paraincluirnalistaositensqueserãoexibidosé necessárioutilizarumObjetoquesejafilhode ListAdapter.Éesseadaptadorqueiráfazertodoo ListAdapter .Éesseadaptadorqueiráfazertodoo trabalhodeincluir/exibirosdadosnalista.
ListAcNvity-Adapter
Casonecessiteexibiritensdeformadiferentedoque oAndroidoferece,bastacriarumaclassequesejaum Adaptador.Normalmenteutiliza-seo Adaptador.Normalmenteutiliza-seoBaseAdapter BaseAdapter nasclassequeseráoadaptador. Parapersonalizaçãodoiteméfeitadentrodométodo sobrecarregadogetView(...) sobrecarregadogetView(...).Essemétodoéchamado .Essemétodoéchamado quandoalistaforexibircadaitemdentrodela.
ListAcNvity-SinmpleCursorAdapter
SimpleCursorAdapterirámapearoqueestivedentro docursoratravésdascolunascomalgumcomponente definidoemumlayout. Cursorpodeserrecuperadoatravés:
Dadadosquandoéexecutadoalgu Dadadosquandoéexecutadoalgumaquerydobanc maquerydobanco o dedadosrecuperandovalores. Alistadecontatosdotelefoneiraretorn AlistadecontatosdotelefoneiraretornarumCursor arumCursor Outrasaplicaçõesquecompartilhemdados
Intents
Éintençãodeexecutaralgumaação.Essaaçãoéenvia paraoSOdoAndroideeleiráverificaraIntent paraoSOdoAndroideeleiráverificara Intente e executardeacordocomoquefoiconfiguradona Intent. Intent. MuitosserviçosdoSOAndroidnecessitamdaintente paraseremexecutado,omaiscomunssãoas Atividades(Activity)eServiços(Services) Atividades(Activity)eServiços(Ser vices)
Intents-aNvas
Androidpermitequeaplicativosexecutemaplicações Androidpermitequeaplicativosexecutemaplicações nativasdoSOatravésdeIntents.Taiscomo:
Browser GoogleMaps EfetuarLigação AbrirSMS AbrircaixadeEmail AbrircaixadeEmail Calendário Câmera Entreoutras
IntentFilter
Permitecriarumfiltroparaexecutaruma determinadaação.Muitoutilizadaparaexecutar serviçodeoutrasaplicaçõesoudoSOAndroid IntentpodeutilizarIntentFilterparaexecutaruma ActivityquandonãosouberonomedaActivityou Activityquandonãosouberonom edaActivityou quandonãotiveracessoaActivity.Exemplo:Abrira Activitydeumaoutraaplicação. Activitydeumaoutraaplicação.
IntentFilter
Paracriarumfiltroondeiráabrirumaactivity,é necessáriodefinirnadeclaraçãodaActivityaTAG dentrodadeclaraçãodaActivityno AndroidManifest.
IntentFilter
AçãoqueaIntentirárealizar.Nonosso exemplofoideclaradoumnomeparaaaçãoondea activityseráexecutadaatravésdonomedeclarado “ ABRIR_ACTIVITY ” ABRIR_ACTIVITY ” utilizadaparainformaraIntentcomoele deveexecutaraação. Comoexecutaraaçãonocódigo: Intent intent = new Intent(“ABRIR_ACTIVITY”); startActivity(intent);
GUI–InterfaceGráfica
VieweViewGroup LinearLayout RelativeLayout GridView TabHost ScrollView TableLayout AbsoluteLayout FrameLayout Gallery
InterfaceGráfica
soscomponentesvisuaisdo tesvisuaisdo Viewéaclassemãedetodo Viewéaclassemãedetodososcomponen Android.Servedebaseparaessecom Android.Servedebaseparaessecomponentesquesão ponentesquesão chamadosdewidgets(Botãoes,T chamadosdewidgets(Botãoes,TextVieweetc). extVieweetc). ViewGroupéclassemãedosgerenciadoresdelayouts ViewGroupéclassemãedosgerenciadoresdelayouts (LinearLayout,RelativeLayouteetc).Viw (LinearLayout,RelativeLayouteetc).ViwGroupserá Groupserá responsávelpororganizarasViewsqueserãoexibidas paraousuário.
InterfaceGráfica
InterfaceGráfica
InterfaceGráfica-Layouts
LinearLayout-OrganizaoscomponentesdeViewde LinearLayout-OrganizaoscomponentesdeViewde formalinear(verticalouhorizontal): ?> xmlns:android= xmlns:android ="http:// > /> />
InterfaceGráfica-Layouts
RelativeLayout:Permiteorganizaroscomponentesde RelativeLayout:Permiteorganizaroscomponentesde ViewatravésdereferenciaaoutraViewou ViewatravésdereferenciaaoutraViewoucomreferencia comreferencia aopróprio RelativeLayout
InterfaceGráfica-Layouts
RelativeLayout
?> > here:"/> />
InterfaceGráfica-Layouts
GridView:Organizaositememgradeautomaticamente GridView:Organizaositememgradeautomaticamente atravésdoListAdapter .ParaessaViewGroupénecessário .ParaessaViewGroupénecessário utilizarumadaptadorparaqueositem utilizarumadaptadorparaqueositemsejamexibidos. sejamexibidos. ?>
InterfaceGráfica-Layouts
TabHost: ExibeaUIemformadeAbas.TabHostseráo gerenciadordasabasemexibição,ecadaabaseráuma instanciadeTabHostondedeveráserincluídooconteúdo daaba.Paraautilizaçãodeabas,énecessáriocriaruma ActivityqueherdadeTabActivity
InterfaceGráfica-Layouts
TabHost public class classMinhaTab2Activity MinhaTab2Activityextends extendsTabActivity TabActivityimplements implementsOnTabChangeListener{ OnTabChangeListener{ @Override protected void voidonCreate(BundlesavedInstanceState){ onCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); super .onCreate(savedInstanceState); TabHosttabHost=getTabHost(); TabSpecaba1=tabHost.newTabSpec("Aba1"); TabSpecaba1=tabHost.newTabSpec("Aba1" ); aba1.setIndicator("MinhaAba1" aba1.setIndicator( "MinhaAba1",getResources().getDrawable(R.drawable.icon)); ,getResources().getDrawable(R.drawable.icon)); IntentinAba1=new IntentinAba1=newIntent( Intent(this this,Aba1Activity. ,Aba1Activity.class class); ); aba1.setContent(inAba1); TabSpecaba2=tabHost.newTabSpec("Aba2"); TabSpecaba2=tabHost.newTabSpec("Aba2" ); aba2.setIndicator("MinhaAba2" aba2.setIndicator( "MinhaAba2"); ); aba2.setContent(new aba2.setContent(newIntent( Intent(this this,Aba2Activity. ,Aba2Activity.class class)); )); tabHost.addTab(aba1); tabHost.addTab(aba2); }
InterfaceGráfica-Layouts
ScrollView:Utilizadoquandoprecisa-seincluirmuitos ScrollView:Utilizadoquandoprecisa-seincluirmuitos componenteemumatelapermitindo componenteemumatelapermitindoousuáriofazera ousuáriofazera rolagemparaavisualizaçãodetodososc rolagemparaavisualizaçãodetodososcomponentes. omponentes. ?> > > < < < > >
InterfaceGráfica-Layouts
TableLayout:ExibeoscomponentesdeViewemlinhase TableLayout:ExibeoscomponentesdeViewemlinhase colunas. ?> >
Views
TextView–Exibeumtextonatela.Suasprincipais propriedades:
android:text–defineumtexto android:text–defineumtexto android:password–exibeotextocommascarade android:password–exibeotextocommascarade password android:autoLink–Definieumlinkdeacessopara: android:autoLink–Definieumlinkdeacessopara: Web,e-mail,phone,mapeall. Web,e-mail,phone,mapeall.
Views
EditText–Viewutilizadaparaaentradadetexto. Podeseralteradaaformadeentradadotextoatravés dopropriedadeandroid:inputType dopropriedadeandroid:inputType,comas ,comas seguintespossíbilidades:
textPassword number textEmailAddress Entreoutros..
Views
Button–Viewquepermiteautilização/exibiçãode Button–Viewquepermiteautilização/exibiçãode umbotãonatela. ImageButton–Temomesmocomportamentodo ImageButton–Temomesmocomportamentodo Buttonmasexibeumaimagemnolugardotexto. CheckBox–Exibeumaviewcomumacaixade CheckBox–Exibeumaviewcomumacaixade seleção. ToggleButton–Exibeumaviewparecidacomo ToggleButton –Exibeumaviewparecidacomo Checkbox,maséutilizadojuntocomtexto,podendo fazerocontrolede“ON”e“OFF”
Views
Spinner–ExibeasopçõesnoformatodecomboBox. Spinner–ExibeasopçõesnoformatodecomboBox. AlertDialog– Permiteaexibiçãodealertas,paracriar umdialogénecessáriocriarumainstanciadaclasse: Alertpermitea android.app.AlertDialog.Builder .. Alertpermitea inclusãodetitulo,descrição,imagem,botõese tambémacustomização.
Views
ProgressDialog–ÉfilhadeAlertDialogepermite ProgressDialog–ÉfilhadeAlertDialogepermite exibirumalertacomprogressanimado. ProgressDialog dialog = ProgressDialog. ProgressDialog.show (MyActivity MyActivity. .this this, , "" "", , "Loading. Please wait...", wait..." , true true); );
ProgressBar–Exibeumabarradeprogresso, ProgressBar–Exibeumabarradeprogresso, permitindoaalteraçãodessabarraconformea conclusãodeumdeterminadoprocesso. ProgressDialog progressDialog; progressDialog; progressDialog = new ProgressDialog ProgressDialog( (mContext); mContext); progressDialog. progressDialog.setProgressStyle setProgressStyle( (ProgressDialog ProgressDialog. .STYLE_HORIZONTAL STYLE_HORIZONTAL); ); progressDialog. progressDialog.setMessage( setMessage("Loading..." "Loading..."); ); progressDialog. progressDialog.setCancelable( setCancelable(false false); );
Views
Menu/SubMenu-Permiteacriaçãodemenusque servirácomoatalhoparaacessaroutraspartesda aplicação.SubMenusserãoopçõesamaisqueum determinadomenuiráoferecerparaousuário.
BancodeDados
AndroidutilizanativamenteobancodedadosSQLite, AndroidutilizanativamenteobancodedadosSQLite, alémdedisponibilizardeAPIsquepossibilitama manipulaçãodabasededados Cadaaplicaçãopodecriarumoumaisbanco.Aocriar seubancoomesmoserásalvonodiretóriodaaplição noaparelho:/data/data/pacote_da_app/databases Bancodedadospodesercriadodasseguintesformas:
UtilizandoumatoolSQLiteeimportand UtilizandoumatoolSQLiteeimportandoobancopara oobancopara aaplição AtravésaAPIdoSQLitedisponívelno AtravésaAPIdoSQLitedisponívelnoSDK SDK Oupeloterminal
BancodeDados
Paracriarobancodedadosatravésdeumatoolpode utilizaraferramentaSQLiteExpertPersonal http://www.softsland.com/sqlite_expert_personal.html
Apóscriarobancodedados,bastaexecutarseu Apóscriarobancodedados,bastaexecutarseu projetonoemuladoreimportarabasededadosno diretório/data/data/pacote_da_app/databases
Bancodedados
Abrindooucriandobancodedados: SQLiteDatabase db = context.openOrCreateDatabase( “meu_db”, Context.MODE_PRIVATE, null);
Modosdepermissão
MODE_PRIVATE:Permiteapenaaaplicaçãoutilizaro MODE_PRIVATE:Permiteapenaaaplicaçãoutilizaro bancodedados :Qualquerumpodeler MODE_WORLD_WRITEABLE:Qualquerumpodeler MODE_WORLD_WRITEABLE eescrever :Qualquerumpode MODE_WORLD_READABLE:Qualquerumpode MODE_WORLD_READABLE somenteler
BancodeDados–Inserindo dados
ComoditoanteriormenteoAndroidSDK disponibilizadeAPIsparaamanipulaçãodabasede dados. Inserindo.Parainserirdadosnobanco,épreciso utilizaroobjetoContentValues,quefuncionacomo HashTable,ondedeveráserincluídososvaloresde acordocomoNomedaColuna+Valor: ContentValuesvalues=new ContentValuesvalues= newContentValues(); ContentValues(); values.put("nome" values.put("nome", ,"Marcelo" "Marcelo"); ); values.put("funcao" values.put("funcao", ,"Engenheiro" "Engenheiro"); ); db.insert("funcionarios" db.insert("funcionarios", ,null null, ,values values); );
Bancodedados-Atualizando
Paraatualizaréutilizadoomesmoobjeto ContentValues ContentValuesvalues=newContentValues(); ContentValuesvalues=new ContentValues(); values.put("nome" values.put("nome", ,"MarceloAlves" "MarceloAlves"); ); values.put("funcao" values.put("funcao", ,"Professor" "Professor"); ); db.update("funcionarios" db.update("funcionarios",values, ,values,"_id=?" "_id=?", ,new newString[]{ String[]{“20" “20"}); });
Identificaçãodascolunas paraacláusulaWhere
Parâmetrosde cadacoluna informadana cláusulaWhere
Bancodedados-Deletando
Paradeletarumoumaisregistros,bastachamaro métododeletedaclasseSQLiteDatabase db.delete(“funcionarios" db.delete(“funcionarios", ,"_id=?" "_id=?", ,new newString[]{ String[]{“20" “20"}); });
Bancodedados–Busca
Paraefetuarabuscanobancodedadosénecessário utilizaroobjetoCursor paraextrairoresultadovindo paraextrairoresultadovindo dobanco. MODE_PRIVATE, , SQLiteDatabasedb=openOrCreateDatabase( "curso" "curso",Context. ,Context. MODE_PRIVATE null); null );
Listfuncionarios= new newArrayList(); ArrayList(); Cursorcursor=db.query( “funcionarios" “funcionarios", ,new newString[]{ String[]{"_id" "_id", ,"nome" "nome", ,"funcao" "funcao"}, }, "nome=?", "nome=?" ,new newString[]{ String[]{"Marcelo" "Marcelo"}, },null null, ,null null, ,null null); ); while(cursor.moveToNext()){ while (cursor.moveToNext()){ Funcionariofunc= new newFuncionario(); Funcionario(); func.setId(cursor.getInt(0)); func.setNome(cursor.getString(cursor.getColumnIndex( "nome" "nome"))); ))); func.setFuncao(cursor.getString(cursor.getColumnIndex( "funcao" "funcao"))); ))); funcionarios.add(func); }
Bancodedados–Busca
Entendendoafunçãoquery Cursorcursor=db.query( “funcionarios" “funcionarios", ,new newString[]{ String[]{"_id" "_id", ,"nome" "nome", ,"funcao" "funcao"}, }, "nome=?", "nome=?" ,new newString[]{ String[]{"Marcelo" "Marcelo"}, },null null, ,null null, ,null null); );
Cláusula Where
Parametroda cláusula Where
groupby having orderby Colunasquedeverão retornarnoresultado. Casopassenull Casopasse todas nulltodas serãoretornadas
SharedPreferences
SharedPreferencepodeserusadocomoumaopçãode armazenamentodeinformações.Osdadossãosalvos emarquivosdosistema,ondetudoégerenciadopela APISharedPreferences. ParasalvarinformaçõesnoSharedPrefenreces,basta informaronomedoseupreferencespararecuperar oucriarumnovoeincluirosdados.
SharedPreferences
CriandoeIncluindonoPreferences: //Carregandooucriandoumnovopreference SharedPreferencesprefs=getSharedPreferences ("meu_pref" "meu_pref", , MODE_PRIVATE MODE_PRIVATE); ); //Salvandopreference SharedPreferences.Editoreditor=prefs.edit(); editor.putBoolean("usuario_logado" editor.putBoolean( "usuario_logado", ,false false); ); editor.commit(); //Recuperandodadosdopreferences booleanisLogado=prefs.getBoolean boolean isLogado=prefs.getBoolean ("usuario_logado" "usuario_logado", ,false false); );
Arquivos
Androiddisponibilizanaactivitymétodosparaa Androiddisponibilizanaactivitymétodosparaa manipulaçãodearquivos:
openFileInput(String)retornaFileInputStream openFileInput(String)retornaFileInputStream retorna openFileOutput(String,mode)retorna openFileOutput(String,mode) FileOutputStream deleteFile(name)retornaboolean deleteFile(name)retornaboolean retornaFile getFileStreamPath(name)retornaFile getFileStreamPath(name)