ti-enxame.com

Como faço para definir o estilo de um textView programaticamente?

Estou criando um textView programaticamente. Existe uma maneira que eu possa definir o estilo deste textView? Algo semelhante a

style="@Android:style/TextAppearance.DeviceDefault.Small"

que eu usaria se eu tivesse um arquivo layout.xml.

24
lokoko

Não é possível definir programaticamente o estilo de uma Visualização, mas você pode fazer algo como textView.setTextAppearance(context, Android.R.style.TextAppearance_Small);.

44
Matthew

Atualmente não é possível definir o estilo de uma View programaticamente. 

Para contornar isso, você pode criar um arquivo xml de layout de modelo com o estilo atribuído, por exemplo, em res/layout create tvtemplate.xml como com o seguinte conteúdo:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:text="This is a template"
        style="@Android:style/TextAppearance.DeviceDefault.Small" />

em seguida, insira isso para instanciar seu novo TextView:

TextView myText = (TextView)getLayoutInflater().inflate(R.layout.tvtemplate, null);
26
Raghav Sood

Na verdade, isso é possível a partir do nível 21 da API.

TextView tem um construtor de parâmetro 4 :

TextView (Context context, 
          AttributeSet attrs, 
          int defStyleAttr, 
          int defStyleRes)

Os dois parâmetros intermediários não são necessários neste caso. O código a seguir cria um TextView diretamente em uma atividade e define apenas seu recurso de estilo:

TextView myStyledTextView = new TextView(this, null, 0, R.style.my_style);
5
John Rattz

Versão de compatibilidade (devido à reprovação na API 23):

TextViewCompat.setTextAppearance(textView, Android.R.style.TextAppearance_DeviceDefault_Small);
4
shmakova

Tente isso

textview.setTextAppearance(context, R.style.yourstyle);

isso pode não funcionar tente Criar um xml com a visão de texto como este

textviewstyle.xml

<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        style="@Android:style/TextAppearance.DeviceDefault.Small" />

Para obter o estilo desejado, infle o xml que contém textview

TextView myText = (TextView)getLayoutInflater().inflate(R.layout.tvstyle, null);
4
Pragnani

Para Views geradas no tempo de execução (no código), você pode passar o estilo para o construtor: View (Context, AttributeSet, int)

Em outro caso, você tem que chamar vários métodos para mudar a aparência

1
outlying
@Deprecated
public void setTextAppearance(Context context, @StyleRes int resId)

este método é obsoleto a partir do Android SKD 23.

você pode usar a versão segura:

if (Build.VERSION.SDK_INT < 23) {
    super.setTextAppearance(context, resId);
} else {
    super.setTextAppearance(resId);
}
0
Robert Grabiński