I created my own button class (I followed this topic: http://developer.android.com/training/custom-views/create-view.html )
Now I would like to create a user state (state_avaibility), I created a new attribute attrs.xml:
<declare-styleable name="CustomButton">
<attr name="state_available" format="boolean" />
</declare-styleable>
I wanted to use
StateListDrawable mNormalDrawable;
mNormalDrawable = new StateListDrawable();
mNormalDrawable.addState(new int[]{R.attr.state_available}, createAvailableDrawable(attr));
But this method does not accept user state.
Do you know how I can create a custom button (create programmatically) and add a custom state?
EDIT:
I created two buttons (accessible and inaccessible), I have two ways to do this:
private LayerDrawable createAvailableDrawable(TypedArray attr) {
LayerDrawable drawableAvailable = (LayerDrawable) getDrawable(R.drawable.button_available).mutate();
return drawableAvailable;
}
private LayerDrawable createUnavailableDrawable(TypedArray attr) {
LayerDrawable drawableUnavailable = (LayerDrawable) getDrawable(R.drawable.button_unavailable).mutate();
return drawableUnavailable;
}
After I got a new custom attribute:
<declare-styleable name="CustomButton">
<attr name="state_available" format="boolean" />
</declare-styleable>
Then I tried the onCreateDrawableState method:
@Override
protected int[] onCreateDrawableState(int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (mIsAvailable) {
mergeDrawableStates(drawableState, STATE_AVAILABLE);
}
return drawableState;
}
Then I tried this:
StateListDrawable mNormalDrawable;
mNormalDrawable = new StateListDrawable();
mNormalDrawable.addState(new int[]{R.attr.state_available}, createAvailableDrawable(attr));
mNormalDrawable.addState(new int[]{-R.attr.state_available}, createUnavailableDrawable(attr));
Now I add a button:
<mobile.custom.com.library.Widget.CustomButton
android:id="@+id/CustomButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
custom:vd_cornerRadius="5dp"
custom:vd_color_text_unavailable="@color/yellow"
custom:vd_text_available="@string/available"
custom:vd_text_unavailable="@string/unavailable"
custom:state_available="false" />
, custom: state_available,