Dynamisk styling av visninger på Android

En ting jeg liker med programvareteknikk er at det ofte er mer enn ett riktig svar på et spørsmål. Hvis du låser 10 utviklere i 10 separate rom og oppgave dem alle med å implementere et program for å katalogisere din personlige videosamling, vil du sannsynligvis få 10 veldig forskjellige programmer. Forutsatt at utviklerne vet hva de gjør, vil imidlertid hvert av de resulterende programmene være perfekt i stand til å katalogisere videoene dine.

Mange ganger som utvikler er min plikt ikke bare å finne ut hvordan jeg skal få noe til å fungere, men å veie en rekke levedyktige alternativer og bestemme hvilke av disse alternativene jeg mener er mest fornuftige i sammenheng med jobben. Denne delen av å være programvareingeniør rommer mye appell for meg. Det har nok også mye å gjøre med hvorfor jeg elsker Android-operativsystemet. Android handler om alternativer.

I mitt TechRepublic-innlegg om måter å kle på knapper i Android-applikasjonene dine, opprettet jeg tilstandslisten og tegner ved hjelp av Android’s XML-layoutspråk. Det er faktisk slik 99% av opplæringsprogrammene du finner på nettet og i Google SDK håndterer å bruke stiler på visninger. Det er raskt, og det fungerer. Men fra tid til annen kan det hende du støter på et scenario der du trenger å gjøre alt fra kildekoden. Det er der Android's fleksibilitet kommer godt med.

I denne opplæringen vil jeg demonstrere en annen teknikk for stylingknapper. Følg gjerne, eller du kan laste ned kildeprosjektet og importere det direkte til Eclipse.

1. Lag et nytt Android-prosjekt i Eclipse. Målrette Android 1.6 eller nyere. Sørg for å gi nytt navn til oppstartsaktiviteten til Main.java.

2. Legg til XML som beskriver skjermen vår i mappen / res / layout. Legg merke til at vi tilordnet en ID ikke bare til knappen, men også til foreldresynet.

 main.xml 

"1.0" encoding = "utf-8" ?>

http://schemas.android.com/apk/res/android

android: layout_width = "fill_parent"

android: layout_height = "fill_parent"

android: orientering = "vertikal"

android: id = "@ + id / main_layout" >

android: layout_width = "fill_parent"

android: layout_height = "wrap_content"

android: gravitasjon = "sentrum"

android: text = "Dynamic Styling Demo" />

android: layout_width = "wrap_content"

android: layout_height = "wrap_content"

android: layout_gravity = "sentrum"

android: text = "En stor knapp!" android: layout_margin = "30dip" android: id = "@ + id / one_big_button" />
3. Fordi demoen er så kort, kommer vi til å implementere den fullstendig i on create overstyring. La oss begynne med å definere en observatør av utsiktstrær. Hvis du ikke har snublet over denne klassen før, er i dag din heldige dag. View tree observatør gir en praktisk måte å komme til utsikten etter at oppsettet er ferdig. Hvis du noen gang har prøvd å se på bredden på en widget i din create, vet du nøyaktig hva jeg får til her. Generelt sett på oppstår før layout og som sådan, mens du kan angi egenskaper for kontroller, kan du normalt ikke komme på attributter som bredde og høyde. View tree observator løser dette problemet pent.
 Main.java- pakke com.authorwjf.dynamic_ui_styling; 
 import android.app.Aktivitet; import android.graphics.LinearGradient; import android.graphics.Shader; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.StateListDrawable; import android.graphics.drawable.shapes.RoundRectShape; import android.os.Bundle; import android.view.View; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.widget.LinearLayout; 
 offentlig klasse Hoved utvider aktivitet { 
private StateListDrawable mStateListDrawable = new StateListDrawable (); 
 @Override offentlig tomrom onCreate (Bundle savedInstanceState) { super .onCreate (savedInstanceState); 

setContentView (R.layout. main );

endelig LinearLayout main = (LinearLayout) findViewById (R.id. main_layout );

ViewTreeObserver vto = main.getViewTreeObserver ();

vto.addOnGlobalLayoutListener ( ny OnGlobalLayoutListener () {

// overstyrer gå her!

});

}

}

4. Det siste du trenger å gjøre er å bytte ut kommentaren inne i den globale layoutlytteren med tegningskoden som vil opprette og tilordne knappebakgrunnen vår.

 Main.java 

Vis v = findViewById (R.id. One_big_button );

float rounded = new float {12, 12, 12, 12, 12, 12, 12, 12}; Shader shader = new LinearGradient (0, 0, v.getWidth (), v.getHeight (), new int {0xFF006600, 0xFF00ff00, 0xFF00ff00, 0}, null, Shader.TileMode. CLAMP ); ShapeDrawable defaultDrawable = new ShapeDrawable ( ny RoundRectShape (avrundet, null, null ));

. DefaultDrawable.getPaint () SetColor (0xff00ff00);

ShapeDrawable pressedDrawable = new ShapeDrawable ( ny RoundRectShape (avrundet, null, null ));

. PressedDrawable.getPaint () setShader (skyggelegger);

mStateListDrawable.addState ( ny int {android.R.attr. state_pressed }, pressedDrawable); mStateListDrawable.addState ( ny int 0, defaultDrawable); v.setBackgroundDrawable (mStateListDrawable);

Å kjøre programmet vil vise en enkelt knapp som har en fin gradient påført når det trykkes på. Denne typen dynamisk styling har et sterkt potensial, spesielt i applikasjoner der du lar brukerne tilpasse synspunkter mens du er på farten. Det er ikke den rette løsningen for hvert scenario, men det er hyggelig å vite at når det er fornuftig, er Android opp til oppgaven.

Figur A

Figur B

© Copyright 2021 | pepebotifarra.com