Build A Custom Launcher på Android

Build A Custom Launcher på Android

81
Del
25
Del
Dette Cyber ​​mandag Envato Tuts + Kursene vil bli redusert til bare $ 3. Ikke gå glipp av
Hva du skal lage
Innledning

I sin mest grunnleggende form, er en bærerakett et program som gjør følgende:.

står det startskjermen til en enhet

det lister og lanserer programmer som er installert på enheten

I andre ord, er det programmet som dukker opp når du trykker på hjem-knappen. Med mindre du allerede har installert en tilpasset bærerakett, er du for tiden bruker standard launcher som følger med Android installasjon. Mye av utstyrsprodusenter har egne standard, tilpassede bæreraketter som samsvarer med deres proprietære utseende, for eksempel Samsung TouchWiz og HTC Sense.

I denne opplæringen, vi kommer til å lage en enkel bærerakett med en grunnleggende brukergrensesnitt. Den vil ha to skjermer:

en startskjermen viser enhetens tapet

en skjerm som viser ikonene og detaljer av programmene som er installert på enheten

1. Krav

Du må ha følgende installert og konfigurert på utviklingsmaskinen:

Android SDK og plattformverktøy

Eclipse IDE 3.7 0,2 eller høyere med ADT plugin

en emulator eller Android-enhet som kjører Android 2.2 eller høyere

Du kan laste ned SDK og plattformverktøy Android utvikleren portal.

2. Prosjektet Setup

Launch Eclipse og opprette en ny Android-applikasjon prosjekt. Jeg navngi programmet SimpleLauncher
, men du kan kalle det hva du vil. Kontroller at du bruker en unik pakke. Den laveste SDK versjon vår launcher støtter er Froyo Hotell og målet SDK er Jelly Bean
.

Siden vi ikke ønsker å skape en aktivitet, deaktiverer Opprett Aktivitet
. Klikk Fullfør
å fortsette.

3. Prosjektet Manifest

Det neste trinnet er å endre AndroidManifest.xml
fil ved å legge to aktiviteter. Den første aktiviteten viser startskjermen. La oss kalle det HomeActivity som vist nedenfor
< aktivitet android. Name = "ah.hathi.simplelauncher.HomeActivity" android: label = "Simple Launcher Home" android: tema = "@ android: style /tema .Wallpaper.NoTitleBar.Fullscreen "android: launchMode =" singleTask "android: stateNotNeeded =" true "> < intent-filter > < handling android: name = "android.intent.action.MAIN" /> < kategori android: name = "android.intent.category.HOME" /> < kategori android: name = "android.intent.category.DEFAULT" /> < /intent-filter > < /aktivitets >

Ved å legge kategoriene android.intent.category.HOME og android.intent.category.DEFAULT til intent-filter gruppe, oppfører den tilhørende aktivitet som en bærerakett og viser seg som et alternativ når du trykker enhetens Hjem-knappen.

Vi trenger også å sette launchMode å singleTask å sørge for at bare én forekomst av denne aktiviteten er holdt av systemet til enhver tid. For å vise brukerens tapet, sette temaet til Theme.Wallpaper.NoTitleBar.FullScreen.

Den andre Activity vi må legge viser programmene som er installert på brukerens enhet. Det er også ansvarlig for å starte programmer. Vi trenger ikke noen spesiell konfigurasjon for denne aktiviteten. Name it AppsListActivity
< aktivitet android. Name = "ah.hathi.simplelauncher.AppsListActivity" android: tema = "@ android: style /Theme.NoTitleBar.Fullscreen" > < /aktivitets >
4. Aktivitets utforminger

Lag en XML-fil for HomeActivity klassen i prosjektets res /layout
mappe og gi den navnet activity_home.xml
. Oppsettet har en enkelt knapp som reagerer på klikk hendelser. Ved å klikke på knappen tar brukeren fra startskjermen til listen over programmer
< RelativeLayout xmlns:. Android = "http://schemas.android.com/apk/res/android~~number=plural" xmlns: verktøy = "http: . //schemas.android.com/tools "android: layout_width =" match_parent "android: layout_height =" match_parent "verktøy: context =" HomeActivity "> < Button android: id = "+ id /apps_button" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: layout_alignParentRight = "true" android: layout_alignParentTop = "true" android: layout_marginRight = "10dp" android : layout_marginTop = "10dp" android: text = "Show Apps" Android: onclick = "showApps" /> < /RelativeLayout >

Deretter oppretter en XML-fil for AppsListActivity klassen i prosjektets res /layout
mappe og gi den navnet activity_apps_list.xml
. Oppsettet inneholder en Listview som tar opp hele skjermen
< 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 "android: orientering =" vertikal "> < Listview android: id = "+ id /apps_list" android: layout_width = "match_parent" android: layout_height = "match_parent" > < /Listview > < /LinearLayout >

Til slutt opprette en tredje XML-fil på samme sted og gi den navnet list_item.xml
. Denne filen definerer utformingen av et element i listevisningen. Hver listevisning element representerer et program installert på brukerens enhet. Det viser ikonet, navnet og pakkenavn for programmet. Vi viser programikonet ved hjelp av en Imageview forekomst og TextView instanser for etiketten og pakkenavn
< xml version = "1.0" encoding = "UTF-8" > < RelativeLayout xmlns:.? Android = "http : //schemas.android.com/apk/res/android "android: layout_width =" match_parent "android: layout_height =" match_parent "android: padding =" 10dp "> < Imageview android: id = "+ id /item_app_icon" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: layout_alignParentLeft = "true" android: layout_centerVertical = "true" /> < TextView android: id = "+ id /item_app_label" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: layout_toRightOf = "+ id /item_app_icon" android: paddingLeft = "10dp" /> < TextView android: id = "+ id /item_app_name" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: layout_below = "+ id /item_app_label" android: layout_toRightOf = "+ id /item_app_icon" android: paddingLeft = "10dp" /> < /RelativeLayout >
5. Igangsettelse av aktiviteten Classes

HomeActivity

Med oppsett av programmet opprettet, er det på tide å lage de to Aktivitets klasser. Når du oppretter de to klassene, må navnet på hver klasse matcher den du anga i prosjektets manifest fil tidligere.

Opprett en ny klasse som heter
HomeActivity og satt android.app.Activity som sin super
pakken ah.hathi.simplelauncher;. import android.app.Activity, import android.content.Intent, import android.os.Bundle, import android.view.View; public class HomeActivity strekker Aktivitet {Override beskyttet void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_home); } Public void showApps (Vis v) {Intent i = new Intent (dette, AppsListActivity.class); startActivity (i); }}

I klassens onCreate metode, påberope vi setContentView, passerer i oppsettet vi opprettet tidligere. Du husker kanskje at vi har lagt til en knapp på activity_home
layout som utløser en metode som heter showApps. Vi trenger nå å implementere denne metoden i HomeActivity klassen. Gjennomføringen er ganske enkel, skaper vi en intensjonsavtale for AppsListActivity klassen og starte den.

AppsListActivity

Opprett en aktivitet klassen heter AppsListActivity og satt android.app.Activity som sin superklasse. I klassens onCreate metode, påberope vi setContentView, passerer i activity_apps_list
layout vi opprettet tidligere
pakken ah.hathi.simplelauncher;. Import android.app.Activity, import android.content.Intent; import android.os.Bundle, import android.view.View; public class AppsListActivity strekker Aktivitet {Override beskyttet void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_apps_list); }}

Selv om vårt rakett ikke er ferdig ennå, kan du lagre og kjøre programmet på dette punktet. Når du trykker på enhetens startknappen, bør du se en pop-up spørre deg hvilken launcher du ønsker å bruke.

Hvis du velger Simple Launcher Hjem
, bør du se den nye startskjermen med en enkelt knapp i øvre høyre hjørne av skjermen. Du bør også se på enheten din nåværende bakgrunnsbilde.


Gå tilbake til Eclipse og lage en klasse som heter AppDetail som vil inneholde detaljer om en applikasjon, emballasjen navn, etikett, og programikon. Grensesnittet er ganske grunnleggende som du kan se nedenfor
pakken ah.hathi.simplelauncher;. Import android.graphics.drawable.Drawable; public class AppDetail {CharSequence label; CharSequence navn; Teikne icon;}
6. Henting Applications

I loadApps metoden i AppsListActivity klassen, bruker vi queryIntentActivities metoden i PackageManager klassen til å hente alle Intents Hotell som har en kategori av Intent.CATEGORY_LAUNCHER. Spørringen returnerer en liste over programmer som kan startes av en bærerakett. Vi sløyfe gjennom resultatene av spørringen og legge hvert element på en liste som heter apps. Ta en titt på følgende kodebiten for avklaring
privat PackageManager manager;. Privat List < AppDetail > apps; private void loadApps () {sjef = getPackageManager (); apps = new Arraylist < AppDetail > (); Intent i = new Intent (Intent.ACTION_MAIN, null); i.addCategory (Intent.CATEGORY_LAUNCHER); List < ResolveInfo > availableActivities = manager.queryIntentActivities (i, 0); for (ResolveInfo ri: availableActivities) {AppDetail app = new AppDetail (); app.label = ri.loadLabel (manager); app.name = ri.activityInfo.packageName; app.icon = ri.activityInfo.loadIcon (manager); apps.add (app); }}
7. Vise listen over applikasjoner

Med apps variabel som inneholder alle de opplysningene vi trenger, kan vi vise listen over programmer som bruker Listview klassen. Vi skaper en enkel ArrayAdapter og overstyre sin getView metode for å gjengi listens elementer. Vi forbinder Listview med adapteren
private Listview-listen.; private void loadListView () {list = (Listview) findViewById (R.id.apps_list); ArrayAdapter < AppDetail > adapter = new ArrayAdapter < AppDetail >. (dette, R.layout.list_item, apps) {Override offentlig Vis getView (int posisjon, Utsikt convertView, ViewGroup forelder) {if (convertView == null) {convertView = getLayoutInflater () blåses (R.layout.list_item, null); } Imageview appIcon = (Imageview) convertView.findViewById (R.id.item_app_icon); appIcon.setImageDrawable (apps.get (stilling) .icon); TextView appLabel = (TextView) convertView.findViewById (R.id.item_app_label); appLabel.setText (apps.get (stilling) .label); TextView Appname = (TextView) convertView.findViewById (R.id.item_app_name); appName.setText (apps.get (stilling) .name); returnere convertView; }}; list.setAdapter (adapter); }
8. Lytte for klikk

Når brukeren klikker på et element i listevisningen, det tilsvarende programmet skal bli lansert av vår launcher. Vi bruker getLaunchIntentForPackage metoden i PackageManager klassen til å lage en intensjonsavtale som starter vi programmet. . Ta en titt på følgende kodebiten
private void addClickListener () {list.setOnItemClickListener (ny AdapterView.OnItemClickListener () {Override public void onItemClick (AdapterView <? ≫ av, Utsikt v, int pos, lang id ) {Intent i = manager.getLaunchIntentForPackage (apps.get (pos) .name.toString ()); AppsListActivity.this.startActivity (i);}});}
9. Putting It All Together

For å gjøre alt arbeide sammen, må vi påkalle loadApps, loadListView og addClickListener i onCreate metoden i AppsListActivity klassen som vist nedenfor.
Beskyttet void onCreate (Bundle savedInstanceState) {super .onCreate (savedInstanceState); setContentView (R.layout.activity_apps_list); loadApps (); loadListView (); addClickListener ();}

Bygg og kjøre programmet en gang til for å se resultatet. Du skal nå kunne se søknadene som kan startes når du klikker på knappen på startskjermen på vår launcher. Klikk på et element for å starte det tilsvarende programmet.

Konklusjon

Du har nå din egen custom launcher. Det er veldig grunnleggende, men du kan legge til alle de tilpasningene du ønsker. Hvis du ønsker å grave dypere inn i tilpassede bæreraketter, oppfordrer jeg deg til å ta en titt på eksempelprogrammer på Android Developer Portal.