View.setPadding accetta solo in px, esiste comunque setPadding in dp?


92

La funzione Android View.setPadding(int left, int top, int right, int bottom)accetta solo valori in px ma voglio impostare il riempimento in dp. C'è un modo per aggirarlo?

Risposte:


184

Direttamente al codice

    int padding_in_dp = 6;  // 6 dps
    final float scale = getResources().getDisplayMetrics().density;
    int padding_in_px = (int) (padding_in_dp * scale + 0.5f);

1
Ciao, ho una domanda. Questa formula è usata solo per imbottitura o altro? es. margine o dimmension di un rettangolo?
emeraldhieu

4
Questa è la formula per convertire le unità dp in unità pixel . Puoi usarlo ovunque
Labeeb Panampullan

2
Presumo che getResources()sia una funzione ereditata da un'attività, ma sto cercando di utilizzare queste righe in un adattatore listview personalizzato. C'è un modo per farlo se non posso chiamare getResources()?
Mike Baxter

1
Dal tuo adattatore esegui semplicemente getContext (). GetResources (). GetDisplayMetrics (). Density;
Steve G.

4
C'è una spiegazione da qualche parte per "+ 0.5f"?
Xavier L.

96

Se definisci la dimensione (in dp o qualsiasi altra cosa) in un file XML (che è comunque meglio, almeno nella maggior parte dei casi), puoi ottenerne il valore in pixel usando questo codice:

context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)

2

C'è un modo migliore per convertire il valore in dp a livello di codice:

int value = 200;
int dpValue = (int) TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP,
            value,        
            context.getResources().getDisplayMetrics());

Quindi applica dpValueal tuo metodo, ad esempio:setPadding(dpValue,dpValue,dpValue,dpValue);



0

Ho lo stesso problema. L'unica soluzione che ho trovato (non ti aiuterà davvero :)) è impostarlo nel file Xml.

Se è possibile ottenere la densità dal codice, è possibile utilizzare la conversione: "La conversione delle unità dip in pixel dello schermo è semplice: pixel = dips * (densità / 160)". (da http://developer.android.com/guide/practices/screens_support.html )

Modifica: puoi ottenere la densità dello schermo: http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.