TextView - definir programaticamente o tamanho do texto parece não funcionar


140

Estou usando o Eclipse Indigo, testando em 2 emuladores (2.2 e 3.0).

o código abaixo mostra o que estou testando agora, no entanto, definir o tamanho do texto não revela nada na tela ao tentar executar o emulador (se eu comentar o tamanho do texto, o texto será exibido em vermelho). Eu pensei que de alguma forma o eclipse não estava reconstruindo o código, mas eu adicionei a linha de código para adicionar o plano de fundo azul e isso funcionou. Eu tentei definir o tamanho do texto depois de definir o texto sem sucesso. o código está abaixo. Obrigado pela ajuda! (isenção de responsabilidade) - estou tentando ficar longe do xml. Sendo que eu já conheço java, não quero depender disso.

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TextView;

public class TestAndroidvs2Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TextView text = new TextView(this);
    text.setTextColor(Color.RED);
    text.setTextSize(2);    
    text.setBackgroundColor(Color.BLUE);
    text.setText("Hello Android");


    setContentView(text);
  }
}

Respostas:


19

O tamanho do texto 2 será praticamente invisível. Experimente com 14 pelo menos. Aliás, o uso de xml tem muitas vantagens e facilitará sua vida quando você precisar fazer algo mais complexo que o 'Hello World'.


Vou tentar com 14. Como eu disse no primeiro post - mesmo que 2 seja muito pequeno, isso não deve deixar minha tela em branco, deveria? Eu acho que estava lendo como uma escala além do que o texto já era, em vez de simplesmente definir o tamanho. - vou procurar, mas perguntarei assim mesmo - qual é o tamanho padrão? de qualquer maneira obrigado.
Cspam 9/08/11

btw - sim, percebo que o xml pode ter suas vantagens, mas não tenho experiência com ele. Sim, eu sei que é provavelmente fácil de aprender. Como eu já estou familiarizado com java, eu apenas pensei que seria realmente útil familiarizar-se com o maior número possível de classes. Parece que o uso de XML oculta muito disso.
Cspam

Não esconde - são as mesmas classes com os mesmos parâmetros. Leva algum tempo para ser capaz de traduzir entre os dois, mas na verdade é bastante eficiente. Como bônus, se você definir visualizações em XML, o sistema cuidará de diferentes tamanhos de tela, densidades e orientações, sem a necessidade de alterar seu código, apenas os arquivos de layout.
Nikolay Elenkov

você seria capaz de alterar os layouts e orientações em tempo de execução com base em vários fatores?
Cspam 9/08/11

Essa é uma pergunta muito ampla, mas, em resumo, sim. Mesmo se você definir sua interface do usuário em XML, ainda poderá adicionar / remover visualizações em tempo de execução. Você também pode substituir o comportamento padrão e lidar com as alterações de orientação.
Nikolay Elenkov

533

o método TextView.setTextSize(int unit , float size);usa dois parâmetros.

Tente o seguinte:

text.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);

consulte isso e isso .

ATUALIZAÇÃO: Agora setTextSize(float size), o tamanho do texto será definido automaticamente nas " scaled pixel" unidades. não é necessário mencionar o COMPLEX_UNIT_SP manualmente. Consulte a documentação .


36
Essa é a resposta correta. Mais especificamente: float myTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18F, context.getResources().getDisplayMetrics());
Brill Pappin

2
Muito obrigado!
DmitryKanunnikoff

72

Isso corrigiu o problema para mim. Eu tenho tamanho de fonte uniforme em todos os dispositivos.

 textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.font));

O número R.dimen.font é uniforme ou você tem tamanhos diferentes para dispositivos diferentes?
The_Martian

No meu caso, declarei fonte nos arquivos dimen.xml nessas pastas: values, values-sw600dp, values-sw720dp com valores específicos.
Vikas

é estranho que o TextView tenha desaparecido depois que o textView.setTextSize (R.dimen.text_size_max) foi chamado, mas use seu método, ele funciona.
li2

Funciona para mim. Obrigado!
apurv thakkar 19/09/19

24

Atualmente, o setTextSize(float size)método funcionará bem, portanto, não precisamos usar outro método para alterar o tamanho do texto

código fonte android.widget.TextView.java

/**
 * Set the default text size to the given value, interpreted as "scaled
 * pixel" units.  This size is adjusted based on the current density and
 * user font size preference.
 *
 * <p>Note: if this TextView has the auto-size feature enabled than this function is no-op.
 *
 * @param size The scaled pixel size.
 *
 * @attr ref android.R.styleable#TextView_textSize
 */
@android.view.RemotableViewMethod
public void setTextSize(float size) {
    setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
}

Exemplo usando

textView.setTextSize(20); // set your text size = 20sp


12

Consulte este link para obter mais informações sobre como definir o tamanho do texto no código. Basicamente diz:

public void setTextSize (unidade int, tamanho do flutuador)

Desde: API Level 1 Defina o tamanho do texto padrão para uma unidade e valor. Consulte TypedValue para obter as possíveis unidades de dimensão. Atributos XML relacionados

android: textSize Parameters

unidade A unidade de dimensão desejada.
tamanho O tamanho desejado nas unidades especificadas.


1
Eu apenas chequei duas vezes no Eclipse no meu código e, de acordo com o intellisense, na verdade, tenho 2 opções para setTextSize, setTextSize (tamanho do flutuador), setTextSize (int unit, float size). A documentação que você vinculou confirma isso.
Cspam

Certo - você tentou? Nikolay também diz que 2 será MUITO pequeno demais para ver, tente aumentar também.
Jack

Sim, mas o problema é que, quando tento fazê-lo da maneira que tenho agora, o texto nem aparece. é apenas uma tela em branco. Mesmo se 2 não era perceptível, por que a tela está em branco?
Cspam 9/08/11

Não está em branco. Se você olhar bem de perto, poderá ver os pequenos pixels vermelhos :). Aumente o tamanho gradualmente para ver.
Nikolay Elenkov

E, a propósito, setTextSize (float) é equivalente a setTextSize (COMPLEX_UNIT_SP, float).
Nikolay Elenkov

10

No meu caso, usei este método :

public static float pxFromDp(float dp, Context mContext) {
    return dp * mContext.getResources().getDisplayMetrics().density;
}

Aqui, defina o TextSize do TextView programaticamente :

textView.setTextSize(pxFromDp(18, YourActivity.this));

Continue curtindo :)


Oi @Dhruv Raval, Estou escolhendo para poder ajustar o tamanho da fonte no meu projeto, caso este valor 18 seja válido para qualquer densidade de tela ou devo criar uma dimensão para cada tela?
Armando Marques Sobrinho
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.