atributo personalizado en el botón personalizado no se muestra
Extendí el widget Button para poder aplicar varios atributos personalizados.
Uno de los atributos es un filtro de color que trato de aplicar a su fondo cuando se crea el botón. No funciona. (Vea las capturas de pantalla y el código a continuación)
Intenté establecer directamente el color de fondo, en el mismo lugar del código, y cambia el color de fondo, pero no es lo que necesito, ya que estoy usando mis propios PNG de botones.
hay 2 problemas hasta ahora:
El filtro de color no se aplica.El botón personalizado se desplaza, se recorta y no se puede hacer clicEl segundo botón utiliza el botón normal, se coloca como se espera y se puede hacer clic. La segunda captura de pantalla muestra que, de hecho, se elige el color correcto, y que es posible cambiar el color de fondo del botón en ese punto del código.
Código:
public class MyButton extends Button {
private int backGroundColor;
public MyButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
TypedArray a = context.getTheme().obtainStyledAttributes(
attrs,
R.styleable.MyButton,
defStyle,
0);
try {
Resources res = getResources();
switch( a.getInteger(R.styleable.MyButton_type, 0) ) {
case 0:
backGroundColor = res.getColor(R.color.Black); break;
case 1:
backGroundColor = res.getColor(R.color.Red); break;
case 2:
backGroundColor = res.getColor(R.color.DimGray); break;
}
getBackground().setColorFilter(backGroundColor, Mode.MULTIPLY);
//setBackgroundColor(backGroundColor)
} finally {
a.recycle();
}
}
public MyButton(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public MyButton(Context context) {
this(context, null, 0);
}
}
El XML que utilicé:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.example.test.MyButton
android:id="@+id/btn1"
android:text="BTN1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="14sp"
android:textColor="@color/Blue"
android:padding="2dp"
android:layout_margin="4dp"
android:background="@drawable/key_selector"
app:type="RedButton"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="14sp"
android:textColor="@color/Blue"
android:padding="2dp"
android:layout_margin="4dp"
android:background="@drawable/key_selector"
android:id="@+id/btn2"
android:text="BTN2"/>
</LinearLayout>
Captura de pantalla del resultado de setColorFilter ()
Captura de pantalla del resultado de setBackgroundColor ()
EDITAR Este es el selector XML que uso para los estados normales y presionados.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/key1_pressed"
android:state_pressed="true"/>
<item
android:drawable="@drawable/key1"/>
</selector>