Quero especificar meu próprio tamanho de texto no meu aplicativo, mas estou tendo problemas para fazer isso.
Quando altero o tamanho da fonte nas configurações do dispositivo, o tamanho da fonte do meu aplicativo TextView
também muda.
Quero especificar meu próprio tamanho de texto no meu aplicativo, mas estou tendo problemas para fazer isso.
Quando altero o tamanho da fonte nas configurações do dispositivo, o tamanho da fonte do meu aplicativo TextView
também muda.
Respostas:
Na verdade, o tamanho da fonte Configurações afeta apenas tamanhos sp
. Então, tudo que você precisa fazer - defina textSize
em dp
vez desp
e as configurações não mudarão o tamanho do texto no seu aplicativo.
Aqui está um link para a documentação: Dimensões
No entanto, observe que o comportamento esperado é que as fontes em todos os aplicativos respeitem as preferências do usuário. Há muitos motivos pelos quais um usuário pode querer ajustar o tamanho da fonte e alguns deles podem até ser usuários com deficiência visual. Usar em dp
vez de sp
texto pode levar a discriminação involuntária contra alguns dos usuários do seu aplicativo.
ou seja:
android:textSize="32dp"
sp
e quando devo usar dp
. Eu recebi uma resposta muito boa aqui: stackoverflow.com/questions/11638691/…
O mais fácil é simplesmente usar algo como o seguinte:
android:textSize="32sp"
Se você quiser saber mais sobre a textSize
propriedade, verifique a documentação do desenvolvedor do Android .
Use o dimension
tipo de recursos como você usa os string
recursos ( DOCS ).
No seu dimens.xml
arquivo, declare suas variáveis de dimensão:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="textview_height">25dp</dimen>
<dimen name="textview_width">150dp</dimen>
<dimen name="ball_radius">30dp</dimen>
<dimen name="font_size">16sp</dimen>
</resources>
Então você pode usar estes valores assim:
<TextView
android:layout_height="@dimen/textview_height"
android:layout_width="@dimen/textview_width"
android:textSize="@dimen/font_size"/>
Você pode declarar diferentes dimens.xml
arquivos diferentes para diferentes tipos de telas. Isso garantirá a aparência desejada do seu aplicativo em diferentes dispositivos.
Quando você não especifica, android:textSize
o sistema usa os valores padrão.
Não é recomendável especificar DIP ou SP novamente por código, quando já definido em um arquivo dimen.xml.
Eu acho que a melhor opção é usar o PX ao usar um valor dimen.xml:
tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.txt_size));
Dessa forma, você pode alternar do DP para o SP, se necessário, no arquivo dimen.xml, sem precisar alterar nenhum código.
Uma maneira simples de impedir que todo o aplicativo seja afetado pelo tamanho da fonte do sistema é atualizar a Configuração usando uma atividade base.
//in base activity add this code.
public void adjustFontScale( Configuration configuration) {
configuration.fontScale = (float) 1.0;
DisplayMetrics metrics = getResources().getDisplayMetrics();
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(metrics);
metrics.scaledDensity = configuration.fontScale * metrics.density;
getBaseContext().getResources().updateConfiguration(configuration, metrics);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adjustFontScale( getResources().getConfiguration());
}
isso pode ajudar. adicione o código no seu Application ou BaseActivity personalizado
/**
* 重写 getResource 方法,防止系统字体影响
*
* @return
*/
@Override
public Resources getResources() {
Resources resources = super.getResources();
if (resources != null && resources.getConfiguration().fontScale != 1) {
Configuration configuration = resources.getConfiguration();
configuration.fontScale = 1;
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
}
return resources;
}
no entanto, o recurso # updateConfiguration é duplicado no nível 25 da API, o que significa que não será suportado algum dia no futuro.
Você pode usar este código:
android:textSize="32dp"
resolve o seu problema, mas você deve saber que deve respeitar as decisões do usuário. por isso, alterar o tamanho do texto nas configurações do dispositivo não altera esse valor. é por isso que você precisa usar sp em vez de dp . Portanto, minha sugestão é revisar seu aplicativo com diferentes tamanhos de fonte do sistema (pequeno, normal, grande, ...)
para kotlin, funciona para mim
priceTextView.textSize = 12f
Se as unidades usadas são SP, não DP, e você deseja substituir o dimensionamento da fonte do sistema, tudo o que você faz é substituir um método em atividade - consulte esta postagem .
resources.updateConfiguration está obsoleto e com erros (no Oreo, tive problemas com o texto formatado).
no android 8 esta solução funciona para mim
adicione este código na atividade base
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(newBase);
final Configuration override = new Configuration(newBase.getResources().getConfiguration());
override.fontScale = 1.0f;
applyOverrideConfiguration(override);
}