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.