Estou fazendo:
button.setLayoutParams(new GridView.LayoutParams(65, 65));
De acordo com os documentos, as unidades para a largura e a altura (ambos os 65 acima) são "pixels". Como você força isso a ser pixels independentes do dispositivo ou "dp"?
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
parapx
? Obrigado.Sei que essa é uma pergunta antiga, mas encontrei uma maneira muito mais clara de fazer essa conversão.
Java
Kotlin
fonte
65
acima é o valor DP que você deseja converter para PXAnalisando 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:
E seu dimens.xml terá:
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.
fonte
A maneira mais simples (e até funciona da API 1) testada é:
Das documentações:
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.
fonte