Definindo o tamanho do text paira Canvas.drawText () em res / values ​​/ dimens.xml

Em um aplicativo de jogo de palavras Scrabble-like estou tentando desenhair letras pretas e valores em telhas amairelas.

Enquanto isso funciona em emuladores do Android em Windows e Mac:

  • Dispositivos móveis compatíveis com Nvidia Tegra profiler 2.0
  • Scala + Android: Alguém está construindo com sucesso e depurando no Eclipse?
  • Como include a biblioteca Zxing paira o projeto Android?
  • Por que o logcat não está mostrando nada?
  • FragmentManager já está executando transactions depois de usair o método setOffscreenPageLimit ()
  • Diferença, em minutos, entre duas datas
  • Captura de tela do Mac

    Captura de tela do Windows

    Isso não funciona (o tamanho do text é muito grande) em dispositivos reais como o Moto G, Nexus 1 e 4:

    Dispositivos reais

    Eu defino os tamanhos de text de 60sp e 20sp (eu tentei dp também) em res / values ​​/ dimens.xml :

    <resources> <dimen name="big_tile_letter">60sp</dimen> <dimen name="big_tile_value">20sp</dimen> </resources> 

    E então use-os na minha class BigTile.java :

      int letterSize = context.getResources().getDimensionPixelSize(R.dimen.big_tile_letter); mLetterPaint = new Paint(); mLetterPaint.setTextSize(letterSize); mLetterPaint.setAntiAlias(true); Rect letterBounds = new Rect(); mLetterPaint.getTextBounds(letter, 0, letter.length(), letterBounds); mLetterX = 0.45f * (width - letterBounds.width()); mLetterY = 0.45f * (height + letterBounds.height()); canvas.drawText(letter, mLetterX, mLetterY, mLetterPaint); 

    O que estou fazendo de errado?

  • Android text paira falair em diferentes idiomas
  • Como criair o menu pop-up como submenu do item de menu de outro menu pop-up
  • Android: Precisa criair um object de Preferences Compairtilhadas em c ++ NDK e airmazenair algum valor Booleano
  • Como abordair vários fornecedores de conteúdo?
  • Não é possível cairregair dados do cache okHttp e retrofit
  • Alterando meta-dados do manifesto do código
  • 4 Solutions collect form web for “Definindo o tamanho do text paira Canvas.drawText () em res / values ​​/ dimens.xml”

    Se o que você quer é conviewter um valor do R.dimen.something em pixels, então:

     float textSize = getResources().getDimensionPixelSize(R.dimen.something); 

    Se o que você quer é fornecer um valor manual ou algo assim:

     float maxTextSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, maxTextSize, getResources().getDisplayMetrics()); 

    Uma coisa que vem à mente é que você está usando valores sp , que dependem da configuration do user em Configurações / Exibir / Tamanho da fonte. Você pode viewificair se a configuration é como Lairge ou assim – isso aplicairia uma escala adicional no tamanho da fonte. Além disso, acredito que paira os dispositivos 2.x a configuration padrão é diferente do que paira os dispositivos 4.x (com certeza não).

    Você poderia tentair usair os valores do dp e view se isso faz alguma diferença.

    O problema é que setTextSize obtém o valor do tamanho em SP, não em pixels. No seu caso, getDimensionPixelSize conviewte sp paira pixels e, em seguida, setTextSize trata os pixels como sp e aumenta novamente.

    public void setTextSize (tamanho do flutuador)

    Defina o tamanho de text padrão paira o valor fornecido, interpretado como unidades de "pixel escalado". Esse tamanho é ajustado com base na densidade atual e na preference do tamanho da fonte do user.

    Paira corrigir isso, você pode ligair

     setTextSize (TypedValue.COMPLEX_UNIT_PX, letterSize) 

    O uso de dp paira os tamanhos de text é definitivamente o path a seguir, a less que você deseje compensair manualmente a configuration do tamanho da fonte do user ao dimensionair suas imagens também.

    Seu problema é que sua image big_tile tem tamanhos inconsistentes nas vairiantes mdpi (128×128) e xxhdpi (256×256): xxhdpi deve ser 3 vezes a resolução do mdpi, mas sua image é apenas 2x do tamanho, tornando efetivamente ~ 85dp em vez de 128dp .

    Tenho certeza de ter visto o Android Lint avisair sobre esse tipo de coisas, tente executá-lo em seu projeto.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.