Aqui está o XML:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/LightStyle"
android:layout_width="fill_parent"
android:layout_height="55dip"
android:clickable="true"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" />
</RelativeLayout>
Como definir o style
atributo programaticamente?
Respostas:
Tecnicamente, você pode aplicar estilos programaticamente, com visualizações personalizadas de qualquer maneira:
O construtor de um argumento é o usado quando você instancia exibições programaticamente.
Então, encadeie esse construtor ao super que leva um parâmetro de estilo.
Ou como @Dori apontou simplesmente:
fonte
http://developer.android.com/reference/android/widget/LinearLayout.html#LinearLayout(android.content.Context, android.util.AttributeSet, int)
. Com o LinearLayout, o nível 11+ é necessário.AttributeSet
?Button
. A abordagem de @Benjamin Piette funciona bem.O que funcionou para mim:
E
fonte
Atualização : no momento de responder a essa pergunta (meados de 2012, nível 14-15 da API), definir a exibição programaticamente não era uma opção (mesmo que houvesse algumas soluções não-triviais), enquanto isso foi possível após a API mais recente lançamentos. Consulte a resposta da @ Blundell para obter detalhes.
Resposta ANTIGA:
Ainda não é possível definir o estilo de uma exibição por meio de programação, mas você pode achar esse thread útil.
fonte
textView.setTextAppearance(context, R.style.mystyle);
. De acordo com o documento "Define a cor, tamanho, estilo, cor da dica e cor do texto do recurso TextAppearance especificado". Por exemplo , você podePara um novo Button / TextView:
Para uma instância existente:
Para imagem ou layouts:
fonte
Se você quiser continuar usando XML (que a resposta aceita não permite) e definir o estilo após a criação da exibição, poderá usar a biblioteca de Paris que suporta um subconjunto de todos os atributos disponíveis.
Como você está inflando sua visualização do XML, você precisará especificar um ID no layout:
Então, quando você precisar alterar o estilo programaticamente, após o layout ter sido inflado:
Para mais: a lista de tipos e atributos de exibição suportados (inclui plano de fundo, preenchimento, margem etc. e pode ser facilmente estendida) e instruções de instalação com documentação adicional .
Disclaimer: Eu sou o autor original da referida biblioteca.
fonte
Você pode aplicar um estilo à sua atividade fazendo:
ou padrão do Android:
em sua atividade, antes
setContentView()
.fonte
Nenhuma das respostas fornecidas está correta.
Você pode definir o estilo programaticamente.
A resposta curta é ver http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/content/Context.java#435
Resposta longa. Aqui está meu snippet para definir estilo definido personalizado programaticamente para sua visualização:
1) Crie um estilo no seu arquivo styles.xml
Não se esqueça de definir seus atributos customizados no arquivo attrs.xml
Meu arquivo attrsl.xml:
Observe que você pode usar qualquer nome para seu estilo (meu CustomWidget)
Agora vamos definir o estilo para o widget Programaticamente Aqui está o meu widget simples:
layout:
E, finalmente, a implementação da classe StyleLoader
Você pode encontrar um exemplo completo de trabalho em https://github.com/Defuera/SetStylableProgramatically
fonte
apply
método que não faz nada de interessante. O verdadeiro significado do estilo é aplicar automaticamente algum estilo visual em todas as futuras visualizações adicionadas dinamicamente. É claro que esse código aqui não pode fazer isso e não há nada dinâmico aqui, precisamos saber quais Views e quais propriedades / campos definir.Esta é uma pergunta bastante antiga, mas a solução que funcionou para mim agora é usar o 4º parâmetro do construtor
defStyleRes
- se disponível .. em exibição ... para definir o estiloTrabalhos a seguir para meus propósitos (kotlin):
fonte
Este é meu exemplo simples, a chave é o
ContextThemeWrapper
wrapper, sem ele, meu estilo não funciona e usando o construtor de três parâmetros da View.fonte
a maneira simples é passar pelo construtor
fonte
Não me proponho a usar ContextThemeWrapper da seguinte maneira:
O que pode gerar resultados indesejados no seu aplicativo. Em vez disso, proponho uma nova biblioteca "paris" para isso dos engenheiros do Airbnb:
https://github.com/airbnb/paris
Mas depois de algum tempo de uso, descobri que na verdade é bastante limitado e parei de usá-lo porque ele não suporta muitas propriedades que eu preciso fora da caixa, então é preciso verificar e decidir como sempre.
fonte
Eu usei visualizações definidas em XML no meu ViewGroup composto, e as adicionei ao Viewgroup. Dessa forma, não posso alterar dinamicamente o estilo, mas posso fazer algumas personalizações de estilo. Meu composto:
}
e minha visão em xml, onde posso atribuir estilos:
fonte
Você pode criar o XML contendo o layout com o estilo desejado e altere o recurso de sua opinião do fundo, como este .
fonte