设计日历视图

时间:2012-04-25 03:37:29

标签: android android-layout

我想在下图中创建一个类似日历的视图,但我不知道从哪里开始。我想找到最好的方法。我想到了GridView,但它没有成功。有人有什么建议吗?

enter image description here

3 个答案:

答案 0 :(得分:2)

使用带有线性布局标题的网格布局。您可以使用GridLayout实现单击命令,并使用一些花哨的适配器工作,您可以管理一周/月的日期。

编辑:

以下是您可以做什么以及GridView如何为您工作的粗略概念。

class CalendarView extends LinearLayout {

    public CalendarView (Context context) {
        super(context);
        setOrientation(LinearLayout.VERTICAL);

        mHeader = new LinearLayout(context);
        mHeader.setOrientation(LinearLayout.HORIZONTAL);
        addView(mHeader);
        // Add in your days, shouldn't be too bad, they are just text views.

        mCalendar = new GridView(context);
        mCalendar.setColumns(mHeader.getNumViews()); // You could hard code this.
        mCalendar.setAdapterView(new CalendarAdapter());
        addView(mCalendar);
    }

    // ... Other contructors


    private class CalendarAdapter extends BaseAdapter {
        // Override methods, this should be too bad.

        @Override public view getView (int pos, View convert, ViewGroup parent) {
            ListView lv = (ListView)convert;
            if (convert == null)
                lv = new ListView(parent.getContext());

            // Here you will need to figure out some way of
            // determining the date.

            CalendarDate app = (CalendarDate)lv.getTag();

            // Determine if this view is already set to the correct date,
            // if not rest the list view

            app.sort();

            lv.setAdapter(new ArrayAdapter(parent.getContext(), R.layout.datelistview, app.getDates());
        }
    }

    public static class CalendarDate {
        List<Appointment> mDates = new ArrayList<Appointment>();

        public void addAppointment(Appointment app) {
            mDate.add(app);
        }

        // ... and the rest of your methods (getters and state returns)
    }

    public Appointment implements Compareable<Appointment> {
        private Date mDate;

        private String mName;   // Appointment name
        private String mDesc;   // Appointment description

        @Override public int compareTo(Appointment to) {
            return mDate.compareTo(mDate);
            }
    }
}

答案 1 :(得分:1)

Android不在SDK中提供任何日历视图。从开发人员的角度来看,这是一个巨大的损失。在很多情况下,显示一个月的日子并为用户提供选择当天的选项是有益的。

一种解决方案是使用第三方组件。第二个是由你自己实现一个

检查这些链接,对您有所帮助

http://w2davids.wordpress.com/android-simple-calendar/

和这个

http://caughtinthemobileweb.wordpress.com/2011/06/20/how-to-implement-calendarview-in-android/

答案 2 :(得分:0)

您可以将水平LinearLayout带入垂直LinearLayout,其中所有textview具有相同的权重。

 android:layout_weight="1"

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

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="sun" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="mon" />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="tue" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="wed" />

        <TextView
            android:id="@+id/textView5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="thu" />

        <TextView
            android:id="@+id/textView6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="fri" />
        <TextView
            android:id="@+id/textView7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="sat" />
    </LinearLayout>
    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="sun" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="mon" />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="tue" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="wed" />

        <TextView
            android:id="@+id/textView5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="thu" />

        <TextView
            android:id="@+id/textView6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="fri" />
        <TextView
            android:id="@+id/textView7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="sat" />
    </LinearLayout>

</LinearLayout>