Android动态生成课程表 详解

根据提供的课程信息,动态生成课程表。不同于网上流传的课表形式,课程节数是固定,本课表的课程节数不固定。

1、效果图

每天共有12节课,上课节数每天都不同。

2、布局文件代码

周一到周日是 7个竖直线性布局文件,其他皆为辅助标题或序号。

<LinearLayout xmlns:android=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity" ><TextViewandroid:id="@+id/title"android:layout_width="match_parent"android:layout_height="20dp"android:gravity="center_horizontal"android:text="课程表"android:textSize="18sp" /><LinearLayoutandroid:id="@+id/weekName"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="0dp"android:layout_height="20dp"android:layout_weight="0.5"android:gravity="center_horizontal|center_vertical"android:background="@color/classIndex"android:layout_marginLeft="@dimen/weekItemMarLeft"android:text="" /><TextViewandroid:layout_width="0dp"android:layout_height="20dp"android:layout_weight="1"android:gravity="center_horizontal|center_vertical"android:background="@color/classIndex"android:text="周一" /><TextViewandroid:layout_width="0dp"android:layout_height="20dp"android:layout_weight="1"android:gravity="center_horizontal|center_vertical"android:background="@color/classIndex"android:text="周二" /><TextViewandroid:layout_width="0dp"android:layout_height="20dp"android:layout_weight="1"android:gravity="center_horizontal|center_vertical"android:background="@color/classIndex"android:text="周三" /><TextViewandroid:layout_width="0dp"android:layout_height="20dp"android:layout_weight="1"android:gravity="center_horizontal|center_vertical"android:background="@color/classIndex"android:text="周四" /><TextViewandroid:layout_width="0dp"android:layout_height="20dp"android:layout_weight="1"android:gravity="center_horizontal|center_vertical"android:background="@color/classIndex"android:text="周五" /><TextViewandroid:layout_width="0dp"android:layout_height="20dp"android:layout_weight="1"android:gravity="center_horizontal|center_vertical"android:background="@color/classIndex"android:text="周六" /><TextViewandroid:layout_width="0dp"android:layout_height="20dp"android:layout_weight="1"android:gravity="center_horizontal|center_vertical"android:background="@color/classIndex"android:text="周日" /></LinearLayout><ScrollViewandroid:id="@+id/scrollPanel"android:layout_width="match_parent"android:layout_height="wrap_content"><LinearLayoutandroid:id="@+id/contentPanel"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><LinearLayoutandroid:id="@+id/weekPanel_0"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="0.5"android:orientation="vertical"><TextViewandroid:layout_width="fill_parent"android:layout_height="@dimen/weekItemHeight"android:gravity="center_horizontal|center_vertical"android:background="@color/classIndex"android:layout_marginTop="@dimen/weekItemMarTop"android:layout_marginLeft="@dimen/weekItemMarLeft"android:text="1" /><TextViewandroid:layout_width="fill_parent"android:layout_height="@dimen/weekItemHeight"android:gravity="center_horizontal|center_vertical"android:text="2"android:background="@color/classIndex"android:layout_marginTop="@dimen/weekItemMarTop"android:layout_marginLeft="@dimen/weekItemMarLeft"/><TextViewandroid:layout_width="fill_parent"android:layout_height="@dimen/weekItemHeight"android:gravity="center_horizontal|center_vertical"android:text="3"android:background="@color/classIndex"android:layout_marginTop="@dimen/weekItemMarTop"android:layout_marginLeft="@dimen/weekItemMarLeft"/><TextViewandroid:layout_width="fill_parent"android:layout_height="@dimen/weekItemHeight"android:gravity="center_horizontal|center_vertical"android:text="4"android:background="@color/classIndex"android:layout_marginTop="@dimen/weekItemMarTop"android:layout_marginLeft="@dimen/weekItemMarLeft"/><TextViewandroid:layout_width="fill_parent"android:layout_height="@dimen/weekItemHeight"android:gravity="center_horizontal|center_vertical"android:text="5"android:background="@color/classIndex"android:layout_marginTop="@dimen/weekItemMarTop"android:layout_marginLeft="@dimen/weekItemMarLeft"/><TextViewandroid:layout_width="fill_parent"android:layout_height="@dimen/weekItemHeight"android:gravity="center_horizontal|center_vertical"android:text="6"android:background="@color/classIndex"android:layout_marginTop="@dimen/weekItemMarTop"android:layout_marginLeft="@dimen/weekItemMarLeft"/><TextViewandroid:layout_width="fill_parent"android:layout_height="@dimen/weekItemHeight"android:gravity="center_horizontal|center_vertical"android:text="7"android:background="@color/classIndex"android:layout_marginTop="@dimen/weekItemMarTop"android:layout_marginLeft="@dimen/weekItemMarLeft"/><TextViewandroid:layout_width="fill_parent"android:layout_height="@dimen/weekItemHeight"android:gravity="center_horizontal|center_vertical"android:text="8"android:background="@color/classIndex"android:layout_marginTop="@dimen/weekItemMarTop"android:layout_marginLeft="@dimen/weekItemMarLeft"/><TextViewandroid:layout_width="fill_parent"android:layout_height="@dimen/weekItemHeight"android:gravity="center_horizontal|center_vertical"android:text="9"android:background="@color/classIndex"android:layout_marginTop="@dimen/weekItemMarTop"android:layout_marginLeft="@dimen/weekItemMarLeft"/><TextViewandroid:layout_width="fill_parent"android:layout_height="@dimen/weekItemHeight"android:gravity="center_horizontal|center_vertical"android:text="10"android:background="@color/classIndex"android:layout_marginTop="@dimen/weekItemMarTop"android:layout_marginLeft="@dimen/weekItemMarLeft"/><TextViewandroid:layout_width="fill_parent"android:layout_height="@dimen/weekItemHeight"android:gravity="center_horizontal|center_vertical"android:text="11"android:background="@color/classIndex"android:layout_marginTop="@dimen/weekItemMarTop"android:layout_marginLeft="@dimen/weekItemMarLeft"/><TextViewandroid:layout_width="fill_parent"android:layout_height="@dimen/weekItemHeight"android:gravity="center_horizontal|center_vertical"android:text="12"android:background="@color/classIndex"android:layout_marginTop="@dimen/weekItemMarTop"android:layout_marginLeft="@dimen/weekItemMarLeft"/></LinearLayout><!– 周一到周日的排列 –><LinearLayoutandroid:id="@+id/weekPanel_1"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1.0"android:orientation="vertical"></LinearLayout><LinearLayoutandroid:id="@+id/weekPanel_2"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1.0"android:orientation="vertical"></LinearLayout><LinearLayoutandroid:id="@+id/weekPanel_3"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1.0"android:orientation="vertical"></LinearLayout><LinearLayoutandroid:id="@+id/weekPanel_4"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1.0"android:orientation="vertical"></LinearLayout><LinearLayoutandroid:id="@+id/weekPanel_5"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1.0"android:orientation="vertical"></LinearLayout><LinearLayoutandroid:id="@+id/weekPanel_6"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1.0"android:orientation="vertical"></LinearLayout><LinearLayoutandroid:id="@+id/weekPanel_7"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1.0"android:orientation="vertical"></LinearLayout></LinearLayout></ScrollView></LinearLayout>3、布局文件中用到的尺寸文件<?xml version="1.0" encoding="utf-8"?><resources><dimen name="weekItemHeight">40dp</dimen><dimen name="weekItemMarTop">2dp</dimen><dimen name="weekItemMarLeft">2dp</dimen></resources>4、颜色文件<?xml version="1.0" encoding="utf-8"?><resources><color name="classIndex" >#CCCCCC</color><color name="courseTextColor" >#ECECEC</color><color name="actionBarBg">#6666CC</color><color name="actionBarText">#EDEDED</color></resources>5、样式文件<resources xmlns:android=""><style name="AppBaseTheme" parent="android:Theme.Light"></style><!– Application theme. –><style name="AppTheme" parent="AppBaseTheme"><item name="android:actionBarStyle">@style/myActionBarStyle</item></style><style name="myActionBarStyle" parent="android:Widget.ActionBar" ><item name="android:background">@color/actionBarBg</item><item name="android:titleTextStyle">@style/myActionBarTextStyle</item><item name="android:height">40dp</item></style><style name="myActionBarTextStyle"><item name="android:textSize">18sp</item><item name="android:textStyle">bold</item><item name="android:textColor">@color/actionBarText</item></style></resources>6、课程实体类代码package com.example.testcourse;public class Course {private String name,room,teach,id;//课程名称、上课教室,教师,课程编号int start,step;//开始上课节次, 一共几节课public Course(String name, String room, int start, int step,String teach, String id) {super();this.name = name;this.room = room;this.start = start;this.step = step;this.teach = teach;this.id = id;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getRoom() {return room;}public void setRoom(String room) {this.room = room;}public int getStart() {return start;}public void setStart(int start) {this.start = start;}public int getStep() {return step;}public void setStep(int step) {this.step = step;}public String getTeach() {return teach;}public void setTeach(String teach) {this.teach = teach;}}7、Activity代码,,只要提供7天课程信息,课表可以自动生成。package com.example.testcourse;import java.util.ArrayList;import java.util.List;import android.os.Bundle;import android.app.Activity;import android.graphics.Color;import android.text.Layout;import android.util.Log;import android.view.Gravity;import android.view.Menu;import android.widget.LinearLayout;import android.widget.TextView;public class MainActivity extends Activity {LinearLayout weekPanels[]=new LinearLayout[7];List courseData[]=new ArrayList[7];int itemHeight;int marTop,marLeft;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//itemHeight=getResources().getDimensionPixelSize(R.dimen.weekItemHeight);marTop=getResources().getDimensionPixelSize(R.dimen.weekItemMarTop);marLeft=getResources().getDimensionPixelSize(R.dimen.weekItemMarLeft);//数据getData();for (int i = 0; i < weekPanels.length; i++) {weekPanels[i]=(LinearLayout) findViewById(R.id.weekPanel_1+i);initWeekPanel(weekPanels[i], courseData[i]);}}public void getData(){List<Course>list1=new ArrayList<Course>();Course c1 =new Course("软件工程","A402", 1, 4, "典韦", "1002");list1.add(c1);list1.add(new Course("C语言", "A101", 6, 3, "甘宁", "1001"));courseData[0]=list1;List<Course>list2=new ArrayList<Course>();list2.add(new Course("计算机组成原理", "A106", 6, 3, "马超", "1001"));courseData[1]=list2;List<Course>list3=new ArrayList<Course>();list3.add(new Course("数据库原理", "A105", 2, 3, "孙权", "1008"));list3.add(new Course("计算机网络", "A405", 6, 2, "司马懿", "1009"));list3.add(new Course("电影赏析", "A112", 9, 2, "诸葛亮", "1039"));courseData[2]=list3;List<Course>list4=new ArrayList<Course>();list4.add(new Course("数据结构", "A223", 1, 3, "刘备", "1012"));list4.add(new Course("操作系统", "A405", 6, 3, "曹操", "1014"));courseData[3]=list4;List<Course>list5=new ArrayList<Course>();list5.add(new Course("Android开发","C120",1,4,"黄盖","1250"));list5.add(new Course("游戏设计原理","C120",8,4,"陆逊","1251"));courseData[4]=list5;}public void initWeekPanel(LinearLayout ll,List<Course>data){if(ll==null || data==null || data.size()<1)return;Log.i("Msg", "初始化面板");Course pre=data.get(0);for (int i = 0; i < data.size(); i++) {Course c =data.get(i);TextView tv =new TextView(this);LinearLayout.LayoutParams lp =new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT ,itemHeight*c.getStep()+marTop*(c.getStep()-1));if(i>0){lp.setMargins(marLeft, (c.getStart()-(pre.getStart()+pre.getStep()))*(itemHeight+marTop)+marTop, 0, 0);}else{lp.setMargins(marLeft, (c.getStart()-1)*(itemHeight+marTop)+marTop, 0, 0);}tv.setLayoutParams(lp);tv.setGravity(Gravity.TOP);tv.setGravity(Gravity.CENTER_HORIZONTAL);tv.setTextSize(12);tv.setTextColor(getResources().getColor(R.color.courseTextColor));tv.setText(c.getName()+"\n"+c.getRoom()+"\n"+c.getTeach());//tv.setBackgroundColor(getResources().getColor(R.color.classIndex));tv.setBackground(getResources().getDrawable(R.drawable.tvshape));ll.addView(tv);pre=c;}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.activity_main, menu);return true;}}

天不负;卧薪尝胆,三千越甲可吞吴。

Android动态生成课程表 详解

相关文章:

你感兴趣的文章:

标签云: