roomorama / Caldroid

A better calendar for Android
Other
1.42k stars 531 forks source link

Runtime exception for device with 4.X #366

Closed sandeeptengale closed 8 years ago

sandeeptengale commented 8 years ago

My app is getting crash on opening the calendar on below lolipop devices. My logs are

Uncaught exception java.lang.RuntimeException: Binary XML file line #14: You must supply a layout_width attribute. at android.content.res.TypedArray.getLayoutDimension(TypedArray.java:491) at android.view.ViewGroup$LayoutParams.setBaseAttributes(ViewGroup.java:5625) at android.view.ViewGroup$MarginLayoutParams.(ViewGroup.java:5746) at android.widget.LinearLayout$LayoutParams.(LinearLayout.java:1776) at android.widget.LinearLayout.generateLayoutParams(LinearLayout.java:1700) at android.widget.LinearLayout.generateLayoutParams(LinearLayout.java:56) at android.view.LayoutInflater.rInflate(LayoutInflater.java:741) at android.view.LayoutInflater.rInflate(LayoutInflater.java:742) at android.view.LayoutInflater.inflate(LayoutInflater.java:489) at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(CalligraphyLayoutInflater.java:60) at android.view.LayoutInflater.inflate(LayoutInflater.java:396) at com.roomorama.caldroid.CaldroidFragment.onCreateView(CaldroidFragment.java:1244) at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613) at android.support.v4.app.Fragment.performStart(Fragment.java:1983) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1102) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) at android.os.Handler.handleCallback(Handler.java:608) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:156) at android.app.ActivityThread.main(ActivityThread.java:4987) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) at dalvik.system.NativeStart.main(Native Method)

sandeeptengale commented 8 years ago

Please check, it not the issue with the version 2.1.0 only after upgrading to 2.3.1 App is getting crashed. But arrow buttons are not aligned in the older version.

Calendar grid is fine, top month display and navigation buttons are not showing properly.

dbreskvar commented 8 years ago

I have an exact same problem on LG G2 which has 4.4, but no problem on Nexus 10. R.layout.calendar_view has a problem I think.

sandeeptengale commented 8 years ago

I found a workaround for this. Anyway this library works fine in 2.1.0, some functions are missing like selectedDate(date), which we can adjust with selectedDates(date, date).

If you are using 2.1.0, it shows the calendar properly, only problem is arrow and month title won't appear properly. You can use margin properties of relative layout and put the things right in their position.

Ex:

       if(android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP){
        ViewGroup.MarginLayoutParams marginLeftParams = new ViewGroup.MarginLayoutParams(caldroidFragment.getLeftArrowButton().getLayoutParams());
        marginLeftParams.setMargins(0, 0, 0, 0);
        RelativeLayout.LayoutParams leftArrowParams = new RelativeLayout.LayoutParams(marginLeftParams);
        caldroidFragment.getLeftArrowButton().setLayoutParams(leftArrowParams);

         ViewGroup.MarginLayoutParams marginRightParams = new ViewGroup.MarginLayoutParams(caldroidFragment.getRightArrowButton().getLayoutParams());
        marginRightParams.setMargins(letfMarginValue, 0, 0, 0);

        RelativeLayout.LayoutParams rightArrowParams = new RelativeLayout.LayoutParams(marginRightParams);
        caldroidFragment.getRightArrowButton().setLayoutParams(rightArrowParams);

        ViewGroup.MarginLayoutParams monthTitle = new ViewGroup.MarginLayoutParams(caldroidFragment.getMonthTitleTextView().getLayoutParams());
        monthTitle.setMargins(leftMarginTitle, 20, 0, 0);

        RelativeLayout.LayoutParams monthTitleParams = new RelativeLayout.LayoutParams(monthTitle);
        caldroidFragment.getMonthTitleTextView().setLayoutParams(monthTitleParams);

}

You won't get crash anymore. But use compile 'com.roomorama:caldroid:2.1.0'

Hope it solves the problem, until they come up with a solution for this

Maragues commented 8 years ago

This is the same bug https://github.com/roomorama/Caldroid/issues/357

I created a PR that might (or might not) fix this issue (https://github.com/roomorama/Caldroid/pull/364)

Now we depend on @thomasdao to build a new release :(