Via lo strumento draw9patch
è possibile definire:
- verticale che si estende: i pixel neri sul lato sinistro
- orizzontale che si estende: i pixel neri sul lato superiore
- contenuto verticale: il nero p ixels sul lato destro
- contenuto orizzontale: i pixel neri sul fondo
Nota che i pixel di stretching non devono essere contigui, in modo da poter escludere alcune fetta specifica di stretching (guardare il freccia popup sopra). Allo stesso tempo puoi fare una ragionevole idea di dove saranno posizionati i tuoi contenuti, semplicemente dando un'occhiata all'anteprima a destra, con le aree viola all'interno. Come puoi immaginare, in questo modo non devi specificare alcun padding nel layout: la vista prenderà in considerazione quei valori utilizzando il 9patch impostato come sfondo.
Le aree di non allungamento si ridimensionano con la densità di pixel. Quindi, se imposti il 9patch sopra come una risorsa mdpi
, la porzione in alto a sinistra viene visualizzata in un'area di 50x40 pixel @mdpi e nell'area di 100x80 pixel @xhdpi. Le aree di allungamento più a sinistra invece regolano la loro larghezza in base a dpi, mentre l'altezza è organizzata in base al contenuto. Altre fette di stretching funzionano in modo simile.
In entrambi i casi, occuparsi di un 9patch "a bassa risoluzione" può portare a brutti artefatti di pixelizzazione. Una possibile soluzione è fornire un diverso 9patch per ogni dpi supportato, o per definire solo quelli più alti (xhdpi) e lasciare che Android riduca di conseguenza.
Anche i limiti di contenuto vengono gestiti come dp
, quindi vengono ridimensionati in base alla densità di pixel. Ad esempio: un riempimento sinistro definito nel 9patch originale come 40px @ mdpi, verrà tradotto in 80px @ xhdpi, quindi il contenuto non fletterà mai i limiti specificati. Nota È anche possibile ignorare i limiti di contenuto specificati in 9patch tramite le proprietà padding*
nel proprio layout.
fonte
2013-02-20 14:40:34
Ho sempre pensato che il contenuto rimarrà (essere forzato, l'area non estensibile che agisce come padding) nella casella risultante dall'intersezione delle linee di tratto. Hai un esempio di contenuto che trabocca di quella scatola o stai solo supponendo che possa traboccare? – Luksprog