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);
  }
}
cspam
fonte

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'.

Nikolay Elenkov
fonte
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 .

Houcine
fonte
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));
Vikas
fonte
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
Phan Van Linh
fonte
Link para a fonte AOSP TextView: github.com/aosp-mirror/platform_frameworks_base/blob/...
Albert Vila Calvo
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.

Jack
fonte
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 :)

Dhruv Raval
fonte
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