risposta supplementare
elenca @Devunwired 3 motivi per utilizzare dimens.xml
. Ecco i dettagli su come farlo.
1. riutilizzo
se si imposta una certa dp
o sp
valore dimens.xml
una volta come questo
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="textview_padding">16dp</dimen>
<dimen name="large_text_size">30sp</dimen>
</resources>
è possibile riutilizzarlo per tutta la vostra applicazione in più posizioni.
<TextView
android:padding="@dimen/textview_padding"
android:textSize="@dimen/large_text_size"
... />
<TextView
android:padding="@dimen/textview_padding"
android:textSize="@dimen/large_text_size"
... />
Poi, quando hai bisogno di fare un cambiamento, avete solo bisogno di farlo in un unico luogo.
Note
- Questo è fondamentalmente lo stesso effetto utilizzando uno stile o un tema.
- essere attenti a non dare due diversi punti di vista lo stesso
dimen
valore se in realtà non dovrebbero essere.Se è necessario apportare modifiche a un gruppo di viste ma non a un altro, sarà necessario tornare a ciascuna di esse individualmente, il che vanifica lo scopo.
2. formato di differenza
- @Devunwired chiamato questa differenza Densità, ma se si utilizza
dp
(densità pixel indipendenti), questo prende già cura sono il problema differenza di densità per tutti, ma i casi più lievi. Quindi, a mio parere, le dimensioni dello schermo sono un fattore più importante per l'utilizzo di dimens.xml
.
Un 8dp
imbottitura potrebbe sembrare grande su un telefono, ma quando l'applicazione viene eseguita su una tavoletta, sembra troppo stretta. È possibile risolvere questo problema creando due (o più) versioni differenti di dimens.xml
.
Fare clic con il pulsante destro del mouse sulla cartella res
e scegliere Nuovo> Valore file di risorse. Quindi scrivi in dimens
e scegli Larghezza schermo più piccola. Scrivi in per la larghezza (tablet da 7 "). (Ci sono altri modi di scegliere le dimensioni. Vedere le documentation e this answer di più.)

In questo modo sarà un'altra cartella values
che verrà utilizzata per i dispositivi più piccoli la cui larghezza dello schermo è 600dp
. Nella vista Android i due file dimens.xml
hanno questo aspetto.

Ora si possono modificare in modo indipendente.
valori/dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_default_padding">16dp</dimen>
</resources>
valori-sw600dp/dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_default_padding">64dp</dimen>
</resources>
Quando si utilizza il dimen
è sufficiente impostare con il nome utilizzato in entrambi i file dimens.xml
.
<LinearLayout
...
android:padding="@dimen/my_default_padding">
</LinearLayout>
Il sistema sceglierà automaticamente il valore corretto per te in base al dispositivo che l'utente sta utilizzando.
3. Lettura in dal codice
A volte è un dolore di scala a livello di codice tra px
e dp
(vedi this answer per quanto).
Se si dispone di un dp
valore fisso già definito in dimens.xml
come questo
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_dp_value">16dp</dimen>
</resources>
Allora si può facilmente ottenere con
int sizeInPixels = getResources().getDimensionPixelSize(R.dimen.my_dp_value);
e sarà già convertito in pixel per qualsiasi dispositivo densità l'utente ha.
Informazioni su # 2, come ti distingui nel file 'dimens.xml' (fornisci un esempio se possibile)? Il motivo 3 è molto convincente. –
@Nazgullato più file nelle directory qualificate. Ad esempio, ponendo un 'dimens.xml' in' res/values' per default e un altro in 'res/values-ldpi' che include i pochi che voglio sovrascrivere per dispositivi a bassa densità. – Devunwired
Pensavo fosse disponibile solo per la cartella dei disegni. Grazie per il consiglio. –