android.view.IflateException:二进制XML文件#1:错误类膨胀

时间:2015-05-22 09:13:51

标签: java android xml sliding

activity_test_sliding_menu.xml

<com.hpc.cbs.myapplication.FlyOutContainer xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#444488"
        android:orientation="vertical"
        android:gravity="center">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="toggleMenu"
            android:text="Button 1"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="toggleMenu"
            android:text="Button 1"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="toggleMenu"
            android:text="Button 1"/>

    </LinearLayout>

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#888888"
        android:orientation="vertical"
        android:gravity="center">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="bla bla"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="toggleMenu"
            android:text="toggle"/>

    </LinearLayout>
</com.hpc.cbs.myapplication.FlyOutContainer>

这里是班级

FlyOutContainer.class

public class FlyOutContainer extends LinearLayout {

    private View menu;
    private View content;

    //Constants
    protected static final int menuMargin = 150;

    protected enum MenuState {
        CLOSED, OPEN, CLOSING, OPENING
    };

    //position information attributes

    protected int currentContentOffset = 0;
    protected MenuState menuCurrentState = MenuState.CLOSED;

    //Animation objects
    protected Scroller menuAnimationScroller = new Scroller(this.getContext(), new LinearInterpolator());
    protected Runnable menuAnimationRunnable = new AnimationRunnable();
    protected Handler menuAnimationHandler = new Handler();

    //animation constants
    private static final int menuAnimationDuration = 1000;
    private static final int  menuAnimationPollingInterval = 16;

    public FlyOutContainer(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public FlyOutContainer(Context context){
        super(context);
    }

    protected void onAttachedToWindow(){
        super.onAttachedToWindow();
        this.menu = this.getChildAt(0);
        this.content = this.getChildAt(1);

        this.menu.setVisibility(View.GONE);
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom)
    {
        if(changed)
            this.calculateChildDimension();
        this.menu.layout(left, top, right-menuMargin, bottom);

        this.content.layout(left + this.currentContentOffset, top, right + this.currentContentOffset, bottom);
    }

    public void toggleMenu() {
        switch (this.menuCurrentState) {
            case CLOSED:
                this.menu.setVisibility(View.VISIBLE);
                this.currentContentOffset = this.getMenuWidth();
                this.content.offsetLeftAndRight(currentContentOffset);
                this.menuCurrentState = MenuState.OPEN;
                break;
            case OPEN:
                this.menu.setVisibility(View.GONE);
                this.currentContentOffset = 0;
                this.content.offsetLeftAndRight(-currentContentOffset);
                this.menuCurrentState = MenuState.CLOSED;
                break;
            default:
                return;
        }
        this.menuAnimationHandler .postDelayed(this.menuAnimationRunnable, menuAnimationPollingInterval);
    }



    private int getMenuWidth() {
        return this.menu.getLayoutParams().width;
    }

    private void calculateChildDimension(){
        this.content.getLayoutParams().height = this.getHeight();
        this.content.getLayoutParams().width = this.getWidth();

        this.menu.getLayoutParams().width = this.getWidth() - menuMargin;
        this.menu.getLayoutParams().height = this.getHeight();
    }

    private void adjustContentPosition(boolean isAnimationOngoing)
    {
        int scrollerOffset = this.menuAnimationScroller.getCurrX();

        this.content.offsetLeftAndRight(scrollerOffset - this.currentContentOffset);
        this.currentContentOffset = scrollerOffset;
        this.invalidate();

        if(isAnimationOngoing)
            this.menuAnimationHandler.postDelayed(this.menuAnimationRunnable, menuAnimationPollingInterval);
        else
            this.onMenuTransitionComplete();
    }

    private void onMenuTransitionComplete()
    {
        switch (this.menuCurrentState)
        {
            case OPENING:
                this.menuCurrentState = MenuState.OPEN;
                break;
            case CLOSING:
                this.menuCurrentState = MenuState.CLOSED;
                this.menu.setVisibility(View.GONE);
                break;
            default:
                return;

        }
    }

    protected class SmoothInterpolator implements Interpolator {
        @Override
        public float getInterpolation(float t)
        {
            return (float) Math.pow(t-1,5) + 1;
        }
    }

    protected class AnimationRunnable implements Runnable
    {
        @Override
        public void run()
        {
            boolean isAnimationOngoing = FlyOutContainer.this.menuAnimationScroller.computeScrollOffset();
            FlyOutContainer.this.adjustContentPosition(isAnimationOngoing);
        }
    }

}

这里是TestSlidingMenuActivity.java

public class TestSlidingMenuActivity extends Activity {

    FlyOutContainer root;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        this.root = (FlyOutContainer) this.getLayoutInflater().inflate(R.layout.activity_test_sliding_menu, null);
        setContentView(root);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.sample, menu);
        return true;
    }

    public void toggleMenu(View v)
    {
        this.root.toggleMenu();
    }
}

我该如何解决这个问题?

0 个答案:

没有答案