Respostas:
Você precisará convertê-lo de dps para pixels usando o fator de escala de exibição.
final float scale = getContext().getResources().getDisplayMetrics().density;
int pixels = (int) (dps * scale + 0.5f);
dp
para px
? Obrigado.
Sei que essa é uma pergunta antiga, mas encontrei uma maneira muito mais clara de fazer essa conversão.
Java
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65, getResources().getDisplayMetrics());
Kotlin
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65f, resources.displayMetrics)
65
acima é o valor DP que você deseja converter para PX
Analisando sua exigência, também há uma solução alternativa. Parece que você conhece as dimensões no dp em tempo de compilação, para que você possa adicionar uma entrada dimen nos recursos. Em seguida, você pode consultar a entrada dimen e ela será automaticamente convertida em pixels nesta chamada:
final float inPixels= mActivity.getResources().getDimension(R.dimen.dimen_entry_in_dp);
E seu dimens.xml terá:
<dimen name="dimen_entry_in_dp">72dp</dimen>
Estendendo essa idéia, você pode simplesmente armazenar o valor de 1dp ou 1sp como uma entrada dimen e consultar o valor e usá-lo como um multiplicador. Usando essa abordagem, você isolará o código das coisas matemáticas e dependerá da biblioteca para realizar os cálculos.
A maneira mais simples (e até funciona da API 1) testada é:
getResources().getDimensionPixelSize(R.dimen.example_dimen);
Das documentações:
Recupere uma dimensão para um ID de recurso específico para uso como um tamanho em pixels brutos. É o mesmo que getDimension (int), exceto que o valor retornado é convertido em pixels inteiros para uso como tamanho. Uma conversão de tamanho envolve arredondar o valor base e garantir que um valor base diferente de zero tenha pelo menos um pixel.
Sim, arredondando o valor, mas não é muito ruim (apenas em valores ímpares nos dispositivos hdpi e ldpi precisam adicionar um pouco de valor quando o ldpi não é muito comum) Eu testei em um dispositivo xxhdpi que converte 4dp em 16 (pixels) e isso é verdade.