2017-08-13 3 views
1

J'ai besoin de définir des tailles de texte, des marges ou des images en Java plutôt qu'en XML en raison de la répétition de la boucle.Dp en XML ne correspond pas java conversion dp-px

Quand je mis 20dp pour le texte dans le fichier xml, le résultat est 3 fois plus petit que même 20dp converti en px avec ce (guide de conception matériel à base) Méthode de conversion:

dp = (largeur en pixels * 160)/densité

Comment obtenir le même dp à travers xml et java?

res:

<resources> 

    <dimen name="cat_height">20dp</dimen> 

</resources> 

xml:

 <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Business" 
      android:textSize="@dimen/cat_height" 
      android:textStyle="bold" /> 

Java:

int dp20 = getResources().getDimensionPixelSize(R.dimen.cat_height); 

(...) 

TextView categoryText = new TextView(this);                          
categoryText.setText(subCategoryNames.get(i));                         
categoryText.setTextSize(dp20);                             
categoryText.setTypeface(null, Typeface.BOLD);                         
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
params.setMargins(dp20, dp20, dp20, dp20);                          
mainLinear.addView(categoryText, params);                           

above xml, below java result

Merci à l'avance!

Répondre

0

utilisent ce

categoryText.setTextSize(TypedValue.COMPLEX_UNIT_PX,dp20); 
+0

merci! mais cette approche ne fonctionne que pour setTextSize. les marges ont toujours besoin de valeurs px. J'ai besoin d'une valeur travaillant dans différents domaines, car partout il y a besoin de px en Java. Comme je le vois setTextSize est une exception – Govean

+0

https://stackoverflow.com/questions/33244196/understanding-typed-value-class – Salman500