Estou criando botões dinamicamente. Eu os estilizei usando XML primeiro, e estou tentando pegar o XML abaixo e torná-lo programático.
<Button
android:id="@+id/buttonIdDoesntMatter"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="buttonName"
android:drawableLeft="@drawable/imageWillChange"
android:onClick="listener"
android:layout_width="fill_parent">
</Button>
É isso que eu tenho até agora. Eu posso fazer tudo, menos o drawable.
linear = (LinearLayout) findViewById(R.id.LinearView);
Button button = new Button(this);
button.setText("Button");
button.setOnClickListener(listener);
button.setLayoutParams(
new LayoutParams(
android.view.ViewGroup.LayoutParams.FILL_PARENT,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT
)
);
linear.addView(button);
drawableLeft
. Tentei suas sugestões aqui para definir um "ícone proibido" quando você clica em uma pasta sem permissões de leitura e funciona. No entanto, quando você altera as pastas e o adaptador é recarregado, o ícone proibido persiste (ou seja,drawableLeft
não é redesenhado). Você sabe como se inscrevernotifyDataSetChanged
também para odrawableLeft
, sem fazer um loop? Obrigado!Listview
item quando os dados são alterados - o que realmente não está relacionado a essa pergunta ou resposta. Sugiro que você publique uma pergunta em vez de um comentário.setCompoundDrawablesWithIntrinsicBounds( 0, 0, R.drawable.money, 0 )
não funcionar, se eu definir o drawableRight na layout.xml. Se eu definir o ícone originalonCreate()
, a alteração funcionará. Poderia estar relacionado à API 19?Simplesmente você pode tentar isso também
fonte
•
Kotlin Version
Use o snippet abaixo para adicionar um desenho à esquerda do botão:
.
•
Important Point in Using Android Vector Drawable
Quando você estiver usando um drawable de vetor android e quiser ter compatibilidade com versões anteriores da API abaixo de 21 , adicione os seguintes códigos a:
No nível do aplicativo
build.gradle
:Na classe Application:
fonte
Context#.getDrawable(resId)
está obsoleto, portanto, usá-lo pode causar alguns problemas.Para mim, funcionou:
fonte
fonte
Eu fiz isso:
fonte
Se você estiver usando drawableStart , drawableEnd , drawableTop ou drawableBottom ; você deve usar " setCompoundDrawablesRelativeWithIntrinsicBounds "
fonte
Trabalhou para mim. Para definir o drawable à direita
fonte
como @ Jérémy Reynaud apontando, conforme descrito nesta resposta , a maneira mais segura de definir o drawable esquerdo sem alterar os valores dos outros drawables (superior, direito e inferior) é usando os valores anteriores do botão com setCompoundDrawablesWithIntrinsicBounds :
Portanto, todo o seu drawable anterior será preservado.
fonte
A seguir, é possível alterar a cor do ícone esquerdo no texto de edição e configurá-lo no lado esquerdo.
fonte
Pode ser útil:
fonte
Adicionar uma extensão Kotlin
Se você fizer isso com frequência, adicionar uma extensão torna seu código mais legível. O botão estende o TextView; use o botão se você quiser ser mais estreito.
Para usar o ramal, basta ligar para
Sempre que precisar limpar, não passe um parâmetro ou faça outra extensão chamada
removeDrawables
fonte
Tente o seguinte:
fonte
Tente o seguinte:
fonte