2010-07-23 12 views
33

Fondamentalmente ho questo XML all'interno, ma devo ricrearlo all'interno di un codice. Come lo faccio?Come si imposta il formato del layout e del testo su DP all'interno del programma?

<EditText 
     android:layout_width="140dp" 
     android:layout_height="20dp" 
     android:background="@drawable/input_bg01" 
     android:textSize="10dp" 
     android:gravity="center" 
     android:text="111-222-333  FOOO" /> 

Posso usare questo per impostare la dimensione del testo, ma per quanto riguarda layout_width e altezza?

edTxt.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10); 

C'è un modo per dire al codice di utilizzare l'unità DP al posto del pixel? O una funzione di conversione per convertire DP in pixel?

risposta

45

Risolto here.

Estratto:

DisplayMetrics metrics = getContext().getResources().getDisplayMetrics(); 
float dp = 20f; 
float fpixels = metrics.density * dp; 
int pixels = (int) (fpixels + 0.5f); 
72

è possibile utilizzare:

float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics()); 

Ora il valore di pixels è equivalente a 10dp a densità di corrente dello schermo del dispositivo.

Il TypedValue contiene altri metodi simili che aiutano nella conversione.

3

Solo per completezza: Un'altra soluzione (che io preferisco) per la domanda è dato here

setTextSize(float) si aspetta un valore di pixel in scala. Quindi, setTextSize(10) ti darebbe il risultato desiderato. Tuttavia, getDimension() e getDimensionPixelSize() restituiscono la dimensione in unità di pixel.

Così, per il vostro esempio sarebbe

setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.edTxt_text_size)); 

dove <dimen name="edtxt_text_size">10dp</dimen> è impostato nel file dimens.xml per esempio.

Problemi correlati