Unable to understand Android custom custom state

I am new to Android development, and I am writing a small application to understand how it works. Everything works for me, but at the moment I can’t talk about the user accessible states ... let me explain the code example.

Here is my attrs.xml in which I declare an attribute named "oddMonth", which is a boolean:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="DayView">
        <attr name="oddMonth" format="boolean"/>
    </declare-styleable>
</resources>

Then I have a custom view:

<?xml version="1.0" encoding="utf-8"?>
<com.example.calendar.DayView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="90dp"
    android:background="@drawable/dayview_state" >
    <TextView android:id="@+id/day_number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:paddingRight="3dp" />  
</com.example.calendar.DayView>

So, I put the line "android: background =" @ drawable / dayview_state "", which refers to the file dayview_state.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:easycalendar="http://schemas.android.com/apk/res/com.example.calendar">

    <item easycalendar:oddMonth ="true" android:drawable="@drawable/customborder_odd" />
    <item easycalendar:oddMonth ="false" android:drawable="@drawable/customborder_even"/>

</selector>

... .... , attrs.xml. . , xml ( ), drawable. , - ! :

public class DayView extends RelativeLayout {
    private static final int[] STATE_ODD_MONTH = { R.attr.oddMonth };
    private boolean mOddmonth = true;

    public DayView(Context mContext, AttributeSet attrs) {
        super(mContext, attrs);
    }

    @Override
    protected int[] onCreateDrawableState(int extraSpace) {
        if (mOddmonth) {
            final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
            mergeDrawableStates(drawableState, STATE_ODD_MONTH);

            return drawableState;
        } else {
            return super.onCreateDrawableState(extraSpace);
        }
    }

    public boolean isOddMonth() {
        return mOddmonth;
    }

    public void setOddMonth(boolean oddMonth) {
        if (mOddmonth != oddMonth) {
            mOddmonth = oddMonth;

            refreshDrawableState();
        }
    }
}

... mOddMonth, getter setter. , . :

private static final int[] STATE_ODD_MONTH = { R.attr.oddMonth };

, int, oddMonth, attrs.xml. :

@Override
    protected int[] onCreateDrawableState(int extraSpace) {
        if (mOddmonth) {
            final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
            mergeDrawableStates(drawableState, STATE_ODD_MONTH);

            return drawableState;
        } else {
            return super.onCreateDrawableState(extraSpace);
        }
    }

"" ... , , , mOddMonth , . ... , dayview_state.xml :

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:easycalendar="http://schemas.android.com/apk/res/com.example.calendar">

    <item easycalendar:oddMonth ="true" android:drawable="@drawable/customborder_odd" />
    <item android:drawable="@drawable/customborder_even"/>

</selector>

, , , . ? /.... ?

+5
2

b/c, , , @kcoppock, -

", (, , ), - - , .... ?"

, , View.getDrawableState.

, .

, Drawable.invalidateSelf. , drawable , draw ( onDraw, ). , , , - (view.invalidate), (, ).

, , onDraw. myDrawable.draw() . , vall view.invalidate onDraw.

0

; AttributeSet:

TypedArray values = context.obtainStyledAttributes(attrs, STATE_ODD_MONTH);
boolean isOddMonth = values.getBoolean(R.attr.oddMonth, false);
mOddmonth = isOddMonth;
values.recycle();

, . attrs.xml hardcoding int [], , .

0