2013-03-15 11 views
6

Devo essere in grado di utilizzare le dimensioni relative per i paddings - per essere più grande o più piccolo a seconda della risoluzione e del dpi del dispositivo.Peso Android con margini e imbottiture

Ad esempio, se la mia vista è larga 100px, mi piacerebbe avere 10px padding a sinistra e 10px padding a destra. Ma, se funziona su uno schermo a densità più alta, e si dice 250px, ho bisogno del padding sinistro e destro per essere entrambi 25pixel ciascuno.

I pixel hardcoding o dp non sembrano ragionevoli, inoltre preferisco evitare la logica di ridimensionamento code-behind se riesco a farla franca. Preferisco anche NON utilizzare alcuna vista vuota pesata aggiuntiva per ottenere lo stesso effetto. Non so come posso simulare il riempimento con esso in entrambi i modi.

C'è un modo per farlo dall'XML? O devo ridimensionarli in base alla risoluzione/dpi del dispositivo dal codice sottostante?

+0

Dovrai essere un po 'più specifico. Margin, Padding e Weight hanno obiettivi molto diversi. Il peso imposterà la larghezza e/o l'altezza della tua vista, ma non il margine. Il riempimento è per * dentro * il widget/vista stessa, quindi questo è ancora più lontano dall'attributo peso. –

+0

@StefandeBruijn punto preso, domanda revisionata. – George

+1

dici che DP (i) non sembra ragionevole, perché no? Non sono pixel hardcoded. Sono punti per pollice. Faranno esattamente quello che vuoi. L'8dpi (margine consigliato da Google) sarà più pixel su uno schermo ad alta risoluzione che su uno schermo a bassa risoluzione. –

risposta

0

Non è davvero "dimensioni relative per paddings", ma penso che l'utilizzo di un Android dimension value defined in XML farà ciò che vuoi. È difficile indovinare dalla tua domanda come vuoi evitare "pixel hardcoding" ma anche "fai questo dal xml";)

Il link sopra dà questo esempio;

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <dimen name="textview_height">25dp</dimen> 
    <dimen name="textview_width">150dp</dimen> 
    <dimen name="ball_radius">30dp</dimen> 
    <dimen name="font_size">16sp</dimen> 
</resources> 

Quindi;

<TextView 
    android:layout_height="@dimen/textview_height" 
    android:layout_width="@dimen/textview_width" 
    android:textSize="@dimen/font_size"/> 

L'SDK di Android utilizza questo approccio;

In es. values/dimens.xml

<resources> 

    <!-- Default screen margins, per the Android Design guidelines. --> 
    <dimen name="activity_horizontal_margin">16dp</dimen> 
    <dimen name="activity_vertical_margin">16dp</dimen> 

</resources> 

values-sw600dp/dimens.xml

<resources> 

    <!-- 
    Customize dimensions originally defined in res/values/dimens.xml (such as 
    screen margins) for sw600dp devices (e.g. 7" tablets) here. 
    --> 

</resources> 

è possibile destinare values-FOO a livello di API, dimensioni dello schermo, ritratto vs paesaggio, le combinazioni di cui sopra "e più" quando si è providing resources utilizzando "nomi di qualificazione di configurazione" .

Problemi correlati