Android动态生成课程表 详解

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

1、效果图

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

2、布局文件代码

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >
    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:gravity="center_horizontal"
        android:text="课程表"
        android:textSize="18sp" />
    <LinearLayout
        android:id="@+id/weekName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
         <TextView
     	        android: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="" />
         <TextView
     	        android:layout_width="0dp"
     	        android:layout_height="20dp"
     	        android:layout_weight="1"
     	        android:gravity="center_horizontal|center_vertical"
     	        android:background="@color/classIndex"
     	        android:text="周一" />
         <TextView
     	        android:layout_width="0dp"
     	        android:layout_height="20dp"
     	        android:layout_weight="1"
     	        android:gravity="center_horizontal|center_vertical"
     	        android:background="@color/classIndex"
     	        android:text="周二" />
         <TextView
     	        android:layout_width="0dp"
     	        android:layout_height="20dp"
     	        android:layout_weight="1"
     	        android:gravity="center_horizontal|center_vertical"
     	        android:background="@color/classIndex"
     	        android:text="周三" />
         <TextView
     	        android:layout_width="0dp"
     	        android:layout_height="20dp"
     	        android:layout_weight="1"
     	        android:gravity="center_horizontal|center_vertical"
     	        android:background="@color/classIndex"
     	        android:text="周四" />
         <TextView
     	        android:layout_width="0dp"
     	        android:layout_height="20dp"
     	        android:layout_weight="1"
     	        android:gravity="center_horizontal|center_vertical"
     	        android:background="@color/classIndex"
     	        android:text="周五" />
         <TextView
     	        android:layout_width="0dp"
     	        android:layout_height="20dp"
     	        android:layout_weight="1"
     	        android:gravity="center_horizontal|center_vertical"
     	        android:background="@color/classIndex"
     	        android:text="周六" />
         <TextView
     	        android:layout_width="0dp"
     	        android:layout_height="20dp"
     	        android:layout_weight="1"
     	        android:gravity="center_horizontal|center_vertical"
     	        android:background="@color/classIndex"
     	        android:text="周日" />

    </LinearLayout>
	<ScrollView
	    android:id="@+id/scrollPanel"
	    android:layout_width="match_parent"
	    android:layout_height="wrap_content"
	    >
	    <LinearLayout
	        android:id="@+id/contentPanel"
	        android:layout_width="match_parent"
	        android:layout_height="wrap_content"
	        android:orientation="horizontal"
	        >
	        <LinearLayout
	     	    android:id="@+id/weekPanel_0"
	     	    android:layout_width="0dp"
	     	    android:layout_height="wrap_content"
	     	    android:layout_weight="0.5"
	     	    android:orientation="vertical"
	     	    >
	     	    <TextView
	     	        android: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" />
	     	    <TextView
	     	        android: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"
	     	        />
	     	    <TextView
	     	        android: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"
	     	        />
	     	    <TextView
	     	        android: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"
	     	        />
	     	    <TextView
	     	        android: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"
	     	        />
	     	    <TextView
	     	        android: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"
	     	        />
	     	    <TextView
	     	        android: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"
	     	        />
	     	    <TextView
	     	        android: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"
	     	        />
	     	    <TextView
	     	        android: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"
	     	        />
	     	    <TextView
	     	        android: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"
	     	        />
	     	    <TextView
	     	        android: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"
	     	        />
	     	    <TextView
	     	        android: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>
	        <!-- 周一到周日的排列 -->
	     	<LinearLayout
	     	    android:id="@+id/weekPanel_1"
	     	    android:layout_width="0dp"
	     	    android:layout_height="wrap_content"
	     	    android:layout_weight="1.0"
	     	    android:orientation="vertical"
	     	    >

	     	</LinearLayout>
	     	<LinearLayout
	     	    android:id="@+id/weekPanel_2"
	     	    android:layout_width="0dp"
	     	    android:layout_height="wrap_content"
	     	    android:layout_weight="1.0"
	     	    android:orientation="vertical"
	     	    >

	     	</LinearLayout>
	     	<LinearLayout
	     	    android:id="@+id/weekPanel_3"
	     	    android:layout_width="0dp"
	     	    android:layout_height="wrap_content"
	     	    android:layout_weight="1.0"
	     	    android:orientation="vertical"
	     	    >

	     	</LinearLayout>
	     	<LinearLayout
	     	    android:id="@+id/weekPanel_4"
	     	    android:layout_width="0dp"
	     	    android:layout_height="wrap_content"
	     	    android:layout_weight="1.0"
	     	    android:orientation="vertical"
	     	    >

	     	</LinearLayout>
	     	<LinearLayout
	     	    android:id="@+id/weekPanel_5"
	     	    android:layout_width="0dp"
	     	    android:layout_height="wrap_content"
	     	    android:layout_weight="1.0"
	     	    android:orientation="vertical"
	     	    >

	     	</LinearLayout>
	     	<LinearLayout
	     	    android:id="@+id/weekPanel_6"
	     	    android:layout_width="0dp"
	     	    android:layout_height="wrap_content"
	     	    android:layout_weight="1.0"
	     	    android:orientation="vertical"
	     	    >

	     	</LinearLayout>
	     	<LinearLayout
	     	    android: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="http://schemas.android.com/apk/res/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;

    @Override
    protected 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;
		}
    }

    @Override
    public 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;
    }

}
时间: 2024-10-14 21:59:50

Android动态生成课程表 详解的相关文章

在配置Grunt的Task时通配符支持和动态生成文件名详解

copy: { // 这是Task里的其中一个Target dests: { expand: true, cwd: '<%=config.app%>/newFolder', src: ['**/{a*,b*}.html'], dest: '<%=config.dist%>/newFolder', ext: ".shtml", extDot: "first", flatten:true, //去掉中间上当,下面的rename可以再找回来 ren

CSDN Android客户端开发(二):详解如何基于Java用Jsoup爬虫HTML数据

本文参考链接详细介绍如何使用Jsoup包抓取HTML数据,是一个纯java工程,并将其打包成jar包.希望了解如何用java语言爬虫网页的可以看下. 杂家前文就又介绍用HTTP访问百度主页得到html的string字符串,但html的文本数据如果不经过处理就是个文本字符串没有任何效果的.所谓的浏览器就是负责将文本的html"翻译"成看到的界面.在前文有介绍,这个csdn的客户端app分首页.业界.移动.研发.程序员.云计算五大类.以业界为例,http://news.csdn.net/ 

Android.mk 文件语法详解

转:http://blog.sina.com.cn/s/blog_602f8770010148ce.html ===================================================================================== 0. Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build System解析一次或多次

Android工程:引用另一个Android工程的方法详解

本篇文章是对在Android中引用另一个Android工程的方法进行了详细的分析介绍.需要的朋友参考下 现在已经有了一个Android工程A.我们想扩展A的功能,但是不想在A的基础上做开发,于是新建了另外一个Android工程B,想在B中引用A. 一个思路是把工程A做成纯Jar包,这样其他的工程就可以直接引用了. 但是,如果在工程A中用了R.java中的引用,则无法打成jar包了.原因是R.java是自动生成的,是动态的,每次编译都是不相同的.如果一定要做成jar包,就不能使用自动生成的R文件,

给 Android 开发者的 RxJava 详解

作者:扔物线 前言 我从去年开始使用 RxJava ,到现在一年多了.今年加入了 Flipboard 后,看到 Flipboard 的 Android 项目也在使用 RxJava ,并且使用的场景越来越多 .而最近这几个月,我也发现国内越来越多的人开始提及 RxJava .有人说『RxJava 真是太好用了』,有人说『RxJava 真是太难用了』,另外更多的人表示:我真的百度了也谷歌了,但我还是想问: RxJava 到底是什么? 鉴于 RxJava 目前这种既火爆又神秘的现状,而我又在一年的使用

Android四大组件--Activity详解

Android四大组件--Activity详解 分类: android android应用android开发 本文的主要内容包括1.activity的建立.配置和使用:2.activity的跳转和传值:3.startActivityForResult:4.activity的生命周期. 1.activity的建立.配置和使用 Activity是一个应用中的组件,它为用户提供一个可视的界面,方便用户操作,比如说拔打电话.照相.发邮件或者是浏览地图等.每个activity会提供一个可视的窗口,一般情况

Android学习Scroller(五)——详解Scroller调用过程以及View的重绘

MainActivity如下: package cc.ww; import android.os.Bundle; import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.RelativeLayout; import android.widget.RelativeLayout.LayoutParams; import android.app.Activity;

Android APK反编译详解(转)

转自:http://blog.csdn.net/ithomer/article/details/6727581 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件.   本文Android反编译教程,测试环境: Win7 Ultimate x64 Ubuntu 12.04 x86_x

Android APK反编译详解(附图) (转至 http://blog.csdn.net/ithomer/article/details/6727581)

本文Android反编译教程,测试环境: Win7 Ultimate x64 Ubuntu 12.04 x86_x64 反编译工具包 下载 (2012-10-10更新) 一.Apk反编译得到Java源代码 下载上述反编译工具包,打开apk2java目录下的dex2jar-0.0.9.9文件夹,内含apk反编译成java源码工具,以及源码查看工具. apk反编译工具dex2jar,是将apk中的classes.dex转化成jar文件 源码查看工具jdgui,是一个反编译工具,可以直接查看反编译后的