Tenho um botão simples com um drawable à esquerda:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/color_primary"
android:onClick="onClick"
android:text="@string/primary"
android:drawableLeft="@drawable/solid_color"
android:drawablePadding="3dp"
/>
Para alterar a cor do desenho eu uso este código:
public void setColorOnButton( int id, int color){
Button btn = findViewById( id );
for( Drawable drawable : btn.getCompoundDrawables()) {
if( drawable != null){
drawable.setColorFilter(new PorterDuffColorFilter( 0xff000000|color, PorterDuff.Mode.SRC_IN));
}
}
}
Funciona bem.
Mas agora eu quero oferecer suporte a idiomas "da direita para a esquerda" e uso este atributo: android:drawableStart
e setColorOnButton
não funciona: btn.getCompoundDrawables()
retorna nulos.
O que está errado?
O método getCompoundDrawables não pode retornar nulo. Ele retorna um array de Drawables. Talvez o array tenha valores nulos ou esteja vazio.
Se entendi sua lógica corretamente, você está usando
android:drawableStart
em vez deandroid:drawableLeft
quando a linguagem é RTL. Nesse caso, você pode usar getCompoundDrawablesRelative que tem acesso a drawables definidos em:Então, seu código ficará assim: