Em dimens.xml, eu tenho:
<dimen name="text_medium">18sp</dimen>
Em tempo de execução, obtenho este valor e defino o tamanho do texto de uma visualização de texto:
int size = context.getResources().getDimensionPixelSize(R.dimen.text_medium);
textView.setTextSize(size).
Em um tablet de 10 ″ (1280 x 800), está tudo ok; mas em um telefone (800 x 480), a exibição de texto tem uma fonte muito grande. No tablet, o tamanho é igual a 18; no telefone, são 27.
Se eu definir o tamanho manualmente por:
textView.setTextSize(size)
o tamanho é normal em ambos os dispositivos.
android
textview
dimensions
Yura Shinkarev
fonte
fonte
TypedValue.COMPLEX_UNIT_SP
?Resources.getDimension()
método retorna o valor que já foi multiplicado pela métrica apropriadaAmbos os métodos getDimensionPixelSize () e getDimension () usam densidade de tela para calcular pixels. A densidade da tela do seu telefone é obviamente hdpi (240dpi), então ele usa a escala de 1,5 para converter dp em sp. Matemática simples 18 * 1,5 = 27.
Parece que a densidade do seu tablet é mdpi (160 dpi), então a escala é de apenas 1: 1.
Mas se você comparar o tamanho real de ambos os textos, deve ser o mesmo.
A melhor maneira é apenas criar dois arquivos dimens.xml, um na pasta de valores para telefone e outro em valores-sw600dp para tablets (você também pode usar a pasta valores-sw720dp-land para armazenar dimensões para tablets de 10 polegadas na orientação paisagem).
Você pode ler mais sobre dimensões no Android em: http://android4beginners.com/2013/07/apêndice-c-everything-about-sizes-and-dimensions-in-android/
fonte
Você pode usar sdp (pixels de desnsidade escaláveis) https://github.com/intuit/sdp no lugar de dp, isso definitivamente salvará sua vida
fonte