2012-04-23 7 views
0
java.lang.RuntimeException: Unable to start activity 
ComponentInfo{com.applexus.PROJMANAGER/com.applexus.PROJMANAGER.CalendarType}: 
android.view.InflateException: Binary XML file line #60: Error inflating class 
com.applexus.Scheduler.CalendarView 

캘린더 활동을 클릭 할 때이 오류가 발생합니다.활동을 여는 동안 오류가 발생했습니다.

이것은 내 활동에서 사용중인 캘린더보기이며 활동을 여는 중에 오류가 발생합니다. 여기 코드는 다음과 같습니다

public class CalendarView extends ImageView { 
private static int WEEK_TOP_MARGIN = 74; 
private static int WEEK_LEFT_MARGIN = 40; 
private static int CELL_WIDTH = 58; 
private static int CELL_HEIGH = 53; 
private static int CELL_MARGIN_TOP = 92; 
private static int CELL_MARGIN_LEFT = 39; 
private static float CELL_TEXT_SIZE; 



private static final String TAG = "CalendarView"; 
private Calendar mRightNow = null; 
private Drawable mWeekTitle = null; 
private Cell mToday = null; 
private Cell[][] mCells = new Cell[6][7]; 
private OnCellTouchListener mOnCellTouchListener = null; 
MonthDisplayHelper mHelper; 
Drawable mDecoration = null; 

public interface OnCellTouchListener { 
    public void onTouch(Cell cell); 
} 

public CalendarView(Context context) { 
    this(context, null); 
} 

public CalendarView(Context context, AttributeSet attrs) { 
    this(context, attrs, 0); 
} 

public CalendarView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    mDecoration = context.getResources().getDrawable(R.drawable.typeb_calendar_today);  
    initCalendarView(); 
} 

private void initCalendarView() { 
    mRightNow = Calendar.getInstance(); 
    // prepare static vars 
    Resources res = getResources(); 
    WEEK_TOP_MARGIN = (int) res.getDimension(R.dimen.week_top_margin); 
    WEEK_LEFT_MARGIN = (int) res.getDimension(R.dimen.week_left_margin); 

    CELL_WIDTH = (int) res.getDimension(R.dimen.cell_width); 
    CELL_HEIGH = (int) res.getDimension(R.dimen.cell_heigh); 
    CELL_MARGIN_TOP = (int) res.getDimension(R.dimen.cell_margin_top); 
    CELL_MARGIN_LEFT = (int) res.getDimension(R.dimen.cell_margin_left); 

    CELL_TEXT_SIZE = res.getDimension(R.dimen.cell_text_size); 
    // set background 
    setImageResource(R.drawable.background); 
    mWeekTitle = res.getDrawable(R.drawable.calendar_week); 

    mHelper = new MonthDisplayHelper(mRightNow.get(Calendar.YEAR), mRightNow.get(Calendar.MONTH)); 

} 

private void initCells() { 
    class _calendar { 
     public int day; 
     public boolean thisMonth; 
     public _calendar(int d, boolean b) { 
      day = d; 
      thisMonth = b; 
     } 
     public _calendar(int d) { 
      this(d, false); 
     } 
    }; 
    _calendar tmp[][] = new _calendar[6][7]; 

    for(int i=0; i<tmp.length; i++) { 
     int n[] = mHelper.getDigitsForRow(i); 
     for(int d=0; d<n.length; d++) { 
      if(mHelper.isWithinCurrentMonth(i,d)) 
       tmp[i][d] = new _calendar(n[d], true); 
      else 
       tmp[i][d] = new _calendar(n[d]); 

     } 
    } 

    Calendar today = Calendar.getInstance(); 
    int thisDay = 0; 
    mToday = null; 
    if(mHelper.getYear()==today.get(Calendar.YEAR) && mHelper.getMonth()==today.get(Calendar.MONTH)) { 
     thisDay = today.get(Calendar.DAY_OF_MONTH); 
    } 
    // build cells 
    Rect Bound = new Rect(CELL_MARGIN_LEFT, CELL_MARGIN_TOP, CELL_WIDTH+CELL_MARGIN_LEFT, CELL_HEIGH+CELL_MARGIN_TOP); 
    for(int week=0; week<mCells.length; week++) { 
     for(int day=0; day<mCells[week].length; day++) { 
      if(tmp[week][day].thisMonth) { 
       if(day==0 || day==6) 
        mCells[week][day] = new RedCell(tmp[week][day].day, new Rect(Bound), CELL_TEXT_SIZE); 
       else 
        mCells[week][day] = new Cell(tmp[week][day].day, new Rect(Bound), CELL_TEXT_SIZE); 
      } else { 
       mCells[week][day] = new GrayCell(tmp[week][day].day, new Rect(Bound), CELL_TEXT_SIZE); 
      } 

      Bound.offset(CELL_WIDTH, 0); // move to next column 

      // get today 
      if(tmp[week][day].day==thisDay && tmp[week][day].thisMonth) { 
       mToday = mCells[week][day]; 
       mDecoration.setBounds(mToday.getBound()); 
      } 
     } 
     Bound.offset(0, CELL_HEIGH); // move to next row and first column 
     Bound.left = CELL_MARGIN_LEFT; 
     Bound.right = CELL_MARGIN_LEFT+CELL_WIDTH; 
    }  
} 

@Override 
public void onLayout(boolean changed, int left, int top, int right, int bottom) { 
    Rect re = getDrawable().getBounds(); 
    WEEK_LEFT_MARGIN = CELL_MARGIN_LEFT = (right-left - re.width())/2; 
    mWeekTitle.setBounds(WEEK_LEFT_MARGIN, WEEK_TOP_MARGIN, WEEK_LEFT_MARGIN+mWeekTitle.getMinimumWidth(), WEEK_TOP_MARGIN+mWeekTitle.getMinimumHeight()); 
    initCells(); 
    super.onLayout(changed, left, top, right, bottom); 
} 

public void setTimeInMillis(long milliseconds) { 
    mRightNow.setTimeInMillis(milliseconds); 
    initCells(); 
    this.invalidate(); 
} 

public int getYear() { 
    return mHelper.getYear(); 
} 

public int getMonth() { 
    return mHelper.getMonth(); 
} 

public void nextMonth() { 
    mHelper.nextMonth(); 
    initCells(); 
    invalidate(); 
} 

public void previousMonth() { 
    mHelper.previousMonth(); 
    initCells(); 
    invalidate(); 
} 

public boolean firstDay(int day) { 
    return day==1; 
} 

public boolean lastDay(int day) { 
    return mHelper.getNumberOfDaysInMonth()==day; 
} 

public void goToday() { 
    Calendar cal = Calendar.getInstance(); 
    mHelper = new MonthDisplayHelper(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH)); 
    initCells(); 
    invalidate(); 
} 

public Calendar getDate() { 
    return mRightNow; 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if(mOnCellTouchListener!=null){ 
     for(Cell[] week : mCells) { 
      for(Cell day : week) { 
       if(day.hitTest((int)event.getX(), (int)event.getY())) { 
        mOnCellTouchListener.onTouch(day); 
       }      
      } 
     } 
    } 
    return super.onTouchEvent(event); 
} 

public void setOnCellTouchListener(OnCellTouchListener p) { 
    mOnCellTouchListener = p; 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    // draw background 
    super.onDraw(canvas); 
    mWeekTitle.draw(canvas); 

    // draw cells 
    for(Cell[] week : mCells) { 
     for(Cell day : week) { 
      day.draw(canvas);   
     } 
    } 

    // draw today 
    if(mDecoration!=null && mToday!=null) { 
     mDecoration.draw(canvas); 
    } 
} 

public class GrayCell extends Cell { 
    public GrayCell(int dayOfMon, Rect rect, float s) { 
     super(dayOfMon, rect, s); 
     mPaint.setColor(Color.LTGRAY); 
    }   
} 

private class RedCell extends Cell { 
    public RedCell(int dayOfMon, Rect rect, float s) { 
     super(dayOfMon, rect, s); 
     mPaint.setColor(0xdddd0000); 
    }   

} 
} 
+0

아마도 레이아웃 XML 파일에 문제가 생길 수 있습니다. 레이아웃 XML 파일에 대한 자세한 내용을 알려주십시오. – MichaelP

+0

코드 일부를 붙여 넣을 수 있습니까 –

+0

문제는 행 번호 60에 부풀어 오르고있는 XML에 있습니다. –

답변

0

을 사용하면 XML 파일을 확인 했습니까? 거기에 문제가 있습니까? 귀하의 로그에 예외가 부풀려서, 그래서 아마 당신의 XML 레이아웃이나 뭔가 부풀어 오르는 프로세스로 인한 것 같아요. 당신은 당신의 활동의 소스 코드를 여기에 올릴 수 있습니다. 우리가 도울 수있는 것을 볼 수 있습니다.

+0

내 코드 – remss

+0

을 게시했습니다.이 솔루션을 도와 줄 수 있습니까 ?? – remss

관련 문제