Dynamisk styling af visninger på Android

Én ting, jeg kan lide ved softwareteknik, er, at der ofte er mere end et rigtigt svar på et spørgsmål. Hvis du låser 10 udviklere i 10 separate rum og opgave dem alle med at implementere et program til katalogisering af din personlige videosamling, får du sandsynligvis 10 meget forskellige programmer. Dog forudsat at udviklerne ved, hvad de laver, vil hvert af de resulterende programmer imidlertid være perfekt i stand til at katalogisere dine videoer.

Mange gange som udvikler er min pligt ikke kun at finde ud af, hvordan man får noget til at fungere, men at veje en række levedygtige muligheder og bestemme, hvilke af disse muligheder, jeg mener, er mest fornuftige i forbindelse med det aktuelle job. Denne del af at være softwareingeniør har meget appel for mig. Det har sandsynligvis også meget at gøre med, hvorfor jeg elsker Android-operativsystemet. Android handler om muligheder.

I mit TechRepublic-indlæg om måder at pynte knapper på i dine Android-applikationer oprettede jeg statslisten og tegnestoffer ved hjælp af Android's XML-layoutsprog. Faktisk er det, hvordan 99% af de selvstudier, du finder på internettet og i Google SDK, håndterer at anvende stilarter til visninger. Det er hurtigt, og det fungerer. Men fra tid til anden kan du muligvis køre på tværs af et scenarie, hvor du skal gøre det hele inden for kildekoden. Det er her Android's fleksibilitet er praktisk.

I denne tutorial vil jeg demonstrere en anden teknik til stylingknapper. Føl dig fri til at følge med, eller du kan downloade kildeprojektet og importere det direkte til Eclipse.

1. Opret et nyt Android-projekt i Eclipse. Mål Android 1.6 eller nyere. Sørg for at omdøbe startaktiviteten til Main.java.

2. I mappen / res / layout skal du tilføje den XML, der beskriver vores skærm. Bemærk, at vi tildelte en id ikke kun til knappen, men også til vores forældresyn.

 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 = "lodret"

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

android: layout_width = "fill_parent"

android: layout_height = "wrap_content"

android: tyngdekraft = "center"

android: text = "Dynamic Styling Demo" />

android: layout_width = "wrap_content"

android: layout_height = "wrap_content"

android: layout_gravity = "center"

android: text = "En stor knap!" android: layout_margin = "30dip" android: id = "@ + id / one_big_button" />
3. Da demoen er så kort, implementerer vi den helt i on create-tilsidesættelse. Lad os starte med at definere en observatør til observatøren. Hvis du ikke har snublet over denne klasse før, er i dag din heldige dag. View tree observatør giver en praktisk måde at komme til synspunkterne, når layoutet er afsluttet. Hvis du nogensinde har prøvet at se på bredden på en widget i din on create, ved du nøjagtigt, hvad jeg får til her. Generelt sker der ved oprettelse inden layout og som sådan, mens du kan indstille egenskaber for kontroller, kan du normalt ikke komme med attributter som bredde og højde. Se træ-observatør løser dette problem pænt.
 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; 
 public class Main udvider aktivitet { 
privat StateListDrawable mStateListDrawable = nyt StateListDrawable (); 
 @Override offentligt tomrum onCreate (Bundle gemtInstanceState) { super .onCreate (gemtInstanceState); 

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. Den sidste ting, du skal gøre, er at erstatte kommentaren inde i den globale layoutlytter med den tegningskode, der opretter og tildeler vores knapbaggrundsbilleder.

 Main.java 

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

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

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

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

. PressedDrawable.getPaint () setShader (shader);

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

Kørsel af programmet viser en enkelt knap, der har en dejlig gradient anvendt på det, når det trykkes på. Denne type dynamisk styling har et meget stærkt potentiale, især i applikationer, hvor du tillader brugere at tilpasse dine synspunkter på farten. Det er ikke den rigtige løsning til hvert scenarie, men det er rart at vide, at når det er fornuftigt, er Android op til opgaven.

Figur A

Figur B

© Copyright 2021 | pepebotifarra.com