4

i am working on an application on CalendarView. i have to show calendarView in a small linear-layout.

problem occurs while displaying a whole page which contains calendarView in small Linear-layout. -> this takes 10 seconds to show,& this is much time...

there is no other thing in layout.

here is my xml and snap...

any help would be strongly appriciated...

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:orientation="vertical" >

            <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="30"
                android:paddingLeft="30dp" >

                <TextView
                    android:id="@+id/txtDate"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="My Calendar"
                    android:textSize="50sp" />

                <View
                    android:layout_width="fill_parent"
                    android:layout_height="2dp"
                    android:layout_alignParentBottom="true"
                    android:layout_marginBottom="40dp"
                    android:layout_marginRight="30dp"
                    android:background="@android:color/black" />
            </RelativeLayout>

            <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="70"
                android:paddingBottom="30dp"
                android:paddingLeft="20dp"
                android:paddingRight="20dp"
                android:paddingTop="30dp" >

                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:orientation="vertical" >

                    <ListView
                        android:id="@+id/list_task"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content" >
                    </ListView>
                </LinearLayout>
            </RelativeLayout>
        </LinearLayout>

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:orientation="vertical" >

            <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="30" >

                <CalendarView
                    android:id="@+id/cal_small"
                    android:layout_width="250dp"
                    android:layout_height="250dp"
                    android:layout_centerHorizontal="true"
                    android:background="@android:color/darker_gray"
                    android:showWeekNumber="false"
                    android:animateLayoutChanges="false"
                    android:clipChildren="false"
                    android:drawingCacheQuality="low"
                    android:soundEffectsEnabled="false"
                    android:hapticFeedbackEnabled="false"
                     />

                <View
                    android:layout_width="fill_parent"
                    android:layout_height="2dp"
                    android:layout_alignParentBottom="true"
                    android:layout_marginBottom="40dp"
                    android:layout_marginLeft="30dp"
                    android:layout_marginRight="30dp"
                    android:background="@android:color/black" />
            </RelativeLayout>

            <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="70" >

                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:layout_marginBottom="30dp"
                    android:layout_marginRight="10dp"
                    android:layout_marginTop="30dp"
                    android:orientation="vertical" >

                    <LinearLayout
                        android:layout_width="fill_parent"
                        android:layout_height="0dp"
                        android:layout_weight="8" >

                        <ListView
                            android:id="@+id/list1"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:paddingLeft="30dp" >
                        </ListView>
                    </LinearLayout>

                    <ListView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" >
                    </ListView>
                </LinearLayout>
            </RelativeLayout>
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

enter image description here

Rumit Patel
  • 8,830
  • 18
  • 51
  • 70
  • 3
    related http://stackoverflow.com/questions/13812084/android-calendarview-slowing-down-layout – laalto Sep 10 '13 at 14:16

4 Answers4

10

It seems very simple but accidentally i have tested this, and it works well. I hope this will also help you...

First create separate xml file which contains only CalendarView. Named “cal_view.xml”

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <android.widget.CalendarView
        android:layout_width="200dp"
        android:layout_height="200dp" />

</LinearLayout> 

Then include this xml file in to your main xml file, just like following. Instead of your CalanderView, include the xml file.

 <include
     android:id="@+id/subCategory"
     layout="@layout/cal_view" />
Alpan
  • 518
  • 1
  • 6
  • 20
1

As you mention your problem,

Issues

Your resource xml file (layout) not in optimal way. As android guideline don't use static height and weight for ViewGroup. Please read http://developer.android.com/training/improving-layouts/optimizing-layout.html

Solution :

In My opinion, you should create your own class for creating Calendar view.In which you apply all the properties and attribute.

I am show a demo application for the Calender view.http://www.androidviews.net/2013/01/ics-calendarview/ In these application having a better way to use the calendar view. also I am mention some Git URL for the other an custom Calendar view

In above Application, showing the right way to use CalendarView

Here I am showing screenshot for the Calenderview application

enter image description here enter image description here enter image description here

If any problem, Please Let me know, I will create sample demo for the same.

Ashish Dwivedi
  • 8,048
  • 5
  • 58
  • 78
  • your answer might be useful @Dwivedi ji, but i am not going to use custom calendar..... – Rumit Patel Sep 13 '13 at 11:04
  • Here I only want to show the what is right way to use Calendar view Please this example ... https://github.com/SimonVT/android-calendarview. this is example use built-in Calendar view with best way – Ashish Dwivedi Sep 13 '13 at 11:20
  • thanks @Dwivedi ji,it helped me how to use CalendarView. but as Alpan's solution, with little change,my work is over... – Rumit Patel Sep 13 '13 at 13:02
1

None of the above answers worked for me, I just changed the width and height to "fill_parent" and now everything works fine for me.

<CalendarView
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"/>
Skilo Skilo
  • 526
  • 4
  • 11
  • 23
0

Putting the CalendarView in a FrameLayout will solve the problem.. i tested it and it work perfectly without glitshing!!!

here is a XML code example:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#cc00b1cc">

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="102dp"
        android:layout_alignParentBottom="true">

        <CalendarView
            android:layout_width="425dp"
            android:layout_height="374dp"
            android:id="@+id/calendarView"
            android:layout_gravity="left|top" />
    </FrameLayout>
</RelativeLayout>
Malek Boubakri
  • 820
  • 2
  • 17
  • 36