Eu gostaria de arredondar os cantos de uma visualização e também alterar a cor da visualização com base no conteúdo em tempo de execução.
TextView v = new TextView(context);
v.setText(tagsList.get(i));
if(i%2 == 0){
v.setBackgroundColor(Color.RED);
}else{
v.setBackgroundColor(Color.BLUE);
}
v.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
v.setPadding(twoDP, twoDP, twoDP, twoDP);
v.setBackgroundResource(R.drawable.tags_rounded_corners);
Eu esperava que a configuração de um drawable e as cores se sobreponham, mas isso não acontece. O que eu executar em segundo lugar é o fundo resultante.
Existe alguma maneira de criar essa visualização programaticamente, tendo em mente que a cor de fundo não será decidida até o tempo de execução?
editar: estou apenas trocando entre vermelho e azul agora para teste. Posteriormente, a cor será escolhida pelo usuário.
editar:
tags_rounded_corners.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<corners
android:bottomRightRadius="2dp"
android:bottomLeftRadius="2dp"
android:topLeftRadius="2dp"
android:topRightRadius="2dp"/>
</shape>
android
android-layout
background
android-view
rounded-corners
John Moffitt
fonte
fonte
tags_rounded_corners
?Respostas:
Em vez de
setBackgroundColor
, recupere o drawable de plano de fundo e defina sua cor:Além disso, você pode definir o preenchimento em
tags_rounded_corners.xml
:fonte
Abordagem programática total para definir cantos arredondados e adicionar cor de fundo aleatória a uma visualização. Eu não testei o código, mas você entendeu.
Aqui estamos usando drawable gradiente para que possamos fazer uso
GradientDrawable#setCornerRadius
porqueShapeDrawable
NÃO fornece tal método.fonte
PaintDrawable
vez deGradientDrawable
. Suporta cantos arredondados e apenas uma única cor, o que parece mais adequado do que um gradiente.var pd = new PaintDrawable(BackgroundColor); pd.SetCornerRadius(15); myView.Background = pd;
Acho que a maneira mais rápida de fazer isso é:
fonte
Você pode alcançá-lo melhor usando DrawableCompat como este:
fonte
Se você não está tendo um derrame, você pode usar
mas isso também mudará a cor do traço
fonte
Aqui está um exemplo usando uma extensão. Isso pressupõe que a visualização tem a mesma largura e altura.
É necessário usar um ouvinte de mudança de layout para obter o tamanho da visualização. Então você pode simplesmente chamá-lo em uma vista como esta
myView.setRoundedBackground(Color.WHITE)
fonte
Você pode alterar dinamicamente a cor de qualquer item (layout, textview). Experimente o código abaixo para definir as cores de maneira programática no layout
no arquivo activity.java
crie layout_round.xml na pasta drawable
layout no arquivo activity.xml
fonte
Copiar o comentário de @cimlman em uma resposta de nível superior para obter mais visibilidade:
Para
ShapeDrawable
sua informação: (e seu subtipo,PaintDrawable
) usa largura intrínseca padrão e altura de 0. Se o drawable não aparecer em seu caso de uso, você pode ter que definir as dimensões manualmente:-1
é uma constante mágica que indica que um Drawable não tem largura e altura intrínsecas próprias ( Fonte ).fonte