Estou tentando usar o TextView
construtor com um estilo como este:
TextView myText = new TextView(MyActivity.this, null, R.style.my_style);
No entanto, quando faço isso, a exibição de texto não parece ter o estilo (verifiquei o estilo configurando-o em um objeto estático).
Eu também tentei usar, myText.setTextAppearance(MyActivity.this, R.style.my_style)
mas também não funciona.
Você pode criar um estilo genérico e reutilizá-lo em várias visualizações de texto, como a abaixo:
Editar: esta refere-se a Contexto
fonte
TextViewCompat.setTextAppearance
Você pode passar um ContextThemeWrapper para o construtor como este:
fonte
<style name="TabButton"><item name="android:background">@drawable/tabbar_button_bkgnd</item>...</style>
. E então eu invocá-lo com uma construção:new Button(new ContextThemeWrapper(context, R.style.TabButton));
. Mas o botão simplesmente ignora minhas configurações. Estou fazendo algo errado aqui?parent="@android:style/Widget.Button"
parent
não mudou um pouco. Então, eu apenas fui em frente com ainflate
solução.new Button(new ContextThemeWrapper(context, R.style.TabButton), null, 0)
. Caso contrário, o estilo de botão padrão será aplicado e esse estilo substituirá o estilo de botão que você mesclou ao tema por meio do ContextThemeWrapper.Você pode definir o estilo no construtor (mas os estilos não podem ser alterados / definidos dinamicamente).
View(Context, AttributeSet, int)
(int
é um atributo no tema atual que contém uma referência a um estilo)Resposta de Romain Guy
referência
fonte
O parâmetro int
defStyleAttr
não especifica o estilo. Na documentação do Android:Para configurar o estilo no construtor View, temos 2 soluções possíveis:
Com o uso do ContextThemeWrapper:
Com construtor de quatro argumentos (disponível a partir de LOLLIPOP):
O principal para ambas as soluções - o
defStyleAttr
parâmetro deve ser 0 para aplicar nosso estilo à visualização.fonte
A alteração dinâmica de estilos ainda não é suportada. Você precisa definir o estilo antes que a exibição seja criada, via XML.
fonte
A resposta aceita foi uma ótima solução para mim. A única coisa a acrescentar é sobre o
inflate()
método.Na resposta aceita, todos os
android:layout_*
parâmetros não serão aplicados.O motivo não é uma maneira de ajustá-lo, a causa
null
foi passada comoViewGroup parent
.Você pode usá-lo assim:
View view = inflater.inflate(R.layout.view, parent, false);
e o
parent
é oViewGroup
, de onde você deseja ajustarandroid:layout_*
.Nesse caso, todas as propriedades relativas serão definidas.
Espero que seja útil para alguém.
fonte
Ao usar visualizações personalizadas que podem usar herança de estilo (ou atributos com estilo de evento), você deve modificar o segundo construtor para não perder o estilo. Isso funcionou para mim, sem a necessidade de usar setTextAppearence () :
fonte
Também encontrei o problema e encontrei o caminho para definir estilo por meio de programação. Talvez todos vocês precisem, então eu atualizo lá.
O terceiro parâmetro do construtor View aceita um tipo de atributo no seu tema como o código-fonte abaixo:
Portanto, você deve passar um tipo de R.attr. ** em vez de R.style. **
Nos meus códigos, executei as seguintes etapas:
Primeiro, personalize um atributo personalizado para ser usado pelos temas em attr.xml.
Segundo, especifique seu estilo no tema usado em style.xml.
No final, use-o!
a visualização criada programaticamente usará o estilo especificado no seu tema.
Você pode tentar e espero que funcione perfeitamente para você.
fonte
Eu testei apenas com EditText, mas você pode usar o método
para aplicar um estilo definido em um arquivo XML.
Se esse método pertence ao View, acredito que funcionará com qualquer elemento da interface do usuário.
Saudações.
fonte
Nós podemos usar
TextViewCompact.setTextAppearance(textView, R.style.xyz)
.Doc Android para referência.
fonte