Se eu atribuir um valor inteiro para alterar um determinado tamanho de texto de um TextView
código java usando, o valor será interpretado como pixel ( px
).
Agora alguém sabe como atribuí-lo sp
?
http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29
Exemplo:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.my_text_size_in_sp));
Obter o tamanho do texto dessa maneira já converterá SP em PX, levando em consideração a densidade da tela e o fator de escala do texto.Você pode usar um
DisplayMetrics
objeto para ajudar a converter entre pixels e pixels em escala com oscaledDensity
atributo .fonte
may be adjusted in smaller increments at runtime based on a user preference for the font size
que o tamanho da fonte será levado em consideração.Uma abordagem mais limpa e reutilizável é
defina o tamanho do texto no
dimens.xml
arquivo dentro dores/values/
diretório:e aplique-o ao
TextView
:fonte
Com base no código fonte de
setTextSize
:Eu construo esta função para calcular qualquer demension para pixels:
Onde a unidade é algo parecido
TypedValue.COMPLEX_UNIT_SP
.fonte
Por padrão, setTextSize, sem unidades, trabalha em SP (dimensiona o pixel)
fonte
Obrigado, @John Leehey e @PeterH:
O problema é que se você definir R.dimen.desired_sp como 25 no seu dimen.xml
fonte
Quando a resposta aceita não funcionar (por exemplo, ao lidar com o Paint), você pode usar:
fonte
fonte
COMPLEX_UNIT_PX
precisará dividir a densidade.Este é o código para o formato PX para SP convertido . 100% Trabalhos
fonte
Depois de tentar todas as soluções e nenhuma fornecer resultados aceitáveis (talvez porque eu estivesse trabalhando em um dispositivo com fontes muito grandes padrão), o seguinte funcionou para mim (COMPLEX_UNIT_DIP = Pixels independentes do dispositivo):
fonte
No Api nível 1, você pode usar o
public void setTextSize (float size)
métodoA partir da documentação:
Então você pode simplesmente fazer:
fonte