Existe uma maneira de obter uma int de cor a partir de um recurso de cor? Estou tentando obter os componentes individuais de vermelho, azul e verde de uma cor definida no recurso (R.color.myColor) para que eu possa definir os valores de três barras de busca para um nível específico.
447
android.R.color.some_color
muito por exemplo:getResources().getColor(android.R.color.holo_blue_bright)
(pelo menos, na API 17)ContextCompat
eResourcesCompat
? Se não houver diferença prática, seria menos confuso se você removesse um deles da sua resposta.Com base na nova Biblioteca de Suporte Android (e nesta atualização), agora você deve ligar para:
De acordo com a documentação :
Este método foi descontinuado no nível 23 da API . Use getColor (int, Theme) em vez disso
É a mesma solução para
getResources().getColorStateList(id)
:Você tem que mudar assim:
EDIT 2019
Em relação ao
ThemeOverlay
uso do contexto da visualização mais próxima:Dessa forma, você obtém a cor certa com base no seu ThemeOverlay.
Especialmente necessário quando na mesma atividade você usa temas diferentes, como tema escuro / claro. Se você gostaria de entender mais sobre Temas e Estilos, esta palestra é sugerida: Desenvolvendo Temas com Estilo
fonte
Theme
pode ser passado como null, então basta chamargetColor(R.color.my_color, null)
se não tiver certeza que tema para passar no.Defina sua cor
values / color.xml
Obtenha a cor int e defina-a
Veja também
fonte
getResources()
em umActivity
ouFragment
?getResources()
fora de uma Atividade ou Fragmento.getResources()
também está disponível como uma API pública em qualquer coisa que implemente o Contexto e também no Views.Melhor Abordagem
Como resposta @sat, uma boa abordagem para obter cores é
ou use abaixo quando você não tiver acesso ao
getResources()
método.O que eu faço é
É mais simples de usar em qualquer lugar do seu aplicativo! Mesmo na classe Util ou qualquer classe em que você não tenha Context ou getResource ()
Problema (quando você não tem contexto)
Quando você não tem
Context
acesso , como um método em suaUtil
classe.Suponha abaixo o método sem contexto.
Agora você passará
Context
como parâmetro neste método e usarágetResources().
Então, aqui está uma solução exclusiva de bônus, pela qual você pode acessar recursos de qualquer lugar
Util class
. AdicioneResources
à suaApplication
turma ou crie uma se ela não existir.Adicione um campo de nome à sua
manifest.xml
<application
tag. (Se ainda não tiver sido adicionado)Agora você está pronto para ir. Use
ResourcesCompat.getColor(App.getRes(), R.color.your_color, null);
em qualquer lugar do aplicativo.fonte
Eu atualizei para usar,
ContextCompat.getColor(context, R.color.your_color);
mas às vezes (em alguns dispositivos / versões do Android. Não tenho certeza) que causa um NullPointerExcepiton.Portanto, para fazê-lo funcionar em todos os dispositivos / versões, recorro à antiga maneira de fazê-lo, no caso de um ponteiro nulo.
fonte
Resources.getColor(int, Theme)
se puder? Você não deve capturar exceções de tempo de execução.Para obter mais informações sobre outro caso de uso que possa ajudar a aflorar essa pergunta nos resultados da pesquisa, eu queria aplicar alfa a uma cor definida em meus recursos.
Usando a resposta correta do @ sat:
fonte
Encontrei uma maneira mais fácil que também funciona:
fonte
Acessar cores de uma classe de não atividade pode ser difícil. Uma das alternativas que eu encontrei estava usando
enum
.enum
oferece muita flexibilidade.fonte
Método de trabalho mais recente:
fonte
Se o seu min atual. O nível da API é 23, você pode simplesmente usar
getColor()
como estamos usando paragetString()
:Se você quiser abaixo do nível da API
23
, use este:Mas observe que isso
getResources().getColor()
foi preterido no nível da API23
. Nesse caso, substitua acima por:ContextCompat : Auxiliar para acessar recursos no
Context
Se desejar, você pode restringir-se
SDK_INT
como abaixo:fonte
em atividade
em fragmento
por exemplo:
fonte