Android课程表显示

前言

在做之前那个查课app时,用到了课程表显示,当然,找资料也费了些功夫,还是自己没做过,经验也少,所以想分享下。

正文

在新建工程后,本文仅给出界面文件和实现代码。
实现效果
新建Activity,可以命名为zhuanyekebiao。
界面代码为:

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


    <TextView android:id="@+id/test_empty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/courseTableText"
        android:text="@string/empty"
        android:background="@drawable/course_text_view_bg"
        />

    <TextView android:id="@+id/test_monday_course"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/courseTableText"
        android:text="@string/mon"
        android:layout_toRightOf="@id/test_empty"
        android:background="@drawable/course_text_view_bg"
        />

    <TextView android:id="@+id/test_tuesday_course"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/tue"
        style="@style/courseTableText"
        android:layout_toRightOf="@id/test_monday_course"
        android:background="@drawable/course_text_view_bg"
        />

    <TextView android:id="@+id/test_wednesday_course"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/wen"
        style="@style/courseTableText"
        android:layout_toRightOf="@id/test_tuesday_course"
        android:background="@drawable/course_text_view_bg"
        />

    <TextView android:id="@+id/test_thursday_course"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/thu"
        style="@style/courseTableText"
        android:layout_toRightOf="@id/test_wednesday_course"
        android:background="@drawable/course_text_view_bg"
        />

    <TextView android:id="@+id/test_friday_course"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/fri"
        style="@style/courseTableText"
        android:layout_toRightOf="@id/test_thursday_course"
        android:background="@drawable/course_text_view_bg"
        />

    <TextView android:id="@+id/test_saturday_course"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/sta"
        style="@style/courseTableText"
        android:layout_toRightOf="@id/test_friday_course"
        android:background="@drawable/course_text_view_bg"
        />

    <TextView android:id="@+id/test_sunday_course"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/courseTableText"
        android:text="@string/sun"
        android:layout_toRightOf="@id/test_saturday_course"
        android:background="@drawable/course_table_last_colum"
        />

    <ScrollView
        android:id="@+id/scroll_body"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/test_empty"
        android:scrollbars="none"
        >
        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/test_course_rl"
            >
        </RelativeLayout>

    </ScrollView>
</RelativeLayout>

具体实现代码如下:

package com.bestyou.chake;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.Menu;
import android.widget.RelativeLayout;
import android.widget.TextView;

import java.util.Random;

public class zhuanyekebiao extends Activity {

    /** 第一个无内容的格子 */
    protected TextView empty;
    /** 星期一的格子 */
    protected TextView monColum;
    /** 星期二的格子 */
    protected TextView tueColum;
    /** 星期三的格子 */
    protected TextView wedColum;
    /** 星期四的格子 */
    protected TextView thrusColum;
    /** 星期五的格子 */
    protected TextView friColum;
    /** 星期六的格子 */
    protected TextView satColum;
    /** 星期日的格子 */
    protected TextView sunColum;
    /** 课程表body部分布局 */
    protected RelativeLayout course_table_layout;
    /** 屏幕宽度 **/
    protected int screenWidth;
    /** 课程格子平均宽度 **/
    protected int aveWidth;
    int gridHeight1 = 0;
    //(0)对应12节;(2)对应34节;(4)对应56节;(6)对应78节;(8)对应于9 10节
    int[] jieci = {0,2,4,6,8};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_zhuanyekebiao);
        //获得列头的控件
        empty = (TextView) this.findViewById(R.id.test_empty);
        monColum = (TextView) this.findViewById(R.id.test_monday_course);
        tueColum = (TextView) this.findViewById(R.id.test_tuesday_course);
        wedColum = (TextView) this.findViewById(R.id.test_wednesday_course);
        thrusColum = (TextView) this.findViewById(R.id.test_thursday_course);
        friColum = (TextView) this.findViewById(R.id.test_friday_course);
        satColum  = (TextView) this.findViewById(R.id.test_saturday_course);
        sunColum = (TextView) this.findViewById(R.id.test_sunday_course);
        course_table_layout = (RelativeLayout) this.findViewById(R.id.test_course_rl);
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        //屏幕宽度
        int width = dm.widthPixels;
        //平均宽度
        int aveWidth = width / 8;
        //第一个空白格子设置为25宽
        empty.setWidth(aveWidth * 3/4);
        monColum.setWidth(aveWidth * 33/32 + 1);
        tueColum.setWidth(aveWidth * 33/32 + 1);
        wedColum.setWidth(aveWidth * 33/32 + 1);
        thrusColum.setWidth(aveWidth * 33/32 + 1);
        friColum.setWidth(aveWidth * 33/32 + 1);
        satColum.setWidth(aveWidth * 33/32 + 1);
        sunColum.setWidth(aveWidth * 33/32 + 1);
        this.screenWidth = width;
        this.aveWidth = aveWidth;
        int height = dm.heightPixels;
        int gridHeight = height / 10;
        gridHeight1 = gridHeight;
        //设置课表界面
        //动态生成10 * maxCourseNum个textview
        for(int i = 1; i <= 10; i ++){

            for(int j = 1; j <= 8; j ++){

                TextView tx = new TextView(zhuanyekebiao.this);
                tx.setId((i - 1) * 8  + j);
                //除了最后一列,都使用course_text_view_bg背景(最后一列没有右边框)
                if(j < 8)
                    tx.setBackgroundDrawable(zhuanyekebiao.this.
                            getResources().getDrawable(R.drawable.course_text_view_bg));
                else
                    tx.setBackgroundDrawable(zhuanyekebiao.this.
                            getResources().getDrawable(R.drawable.course_table_last_colum));
                //相对布局参数
                RelativeLayout.LayoutParams rp = new RelativeLayout.LayoutParams(
                        aveWidth * 33 / 32 + 1,
                        gridHeight);
                //文字对齐方式
                tx.setGravity(Gravity.CENTER);
                //字体样式
                tx.setTextAppearance(this, R.style.courseTableText);
                //如果是第一列,需要设置课的序号(1 到 12)
                if(j == 1)
                {
                    tx.setText(String.valueOf(i));
                    rp.width = aveWidth * 3/4;
                    //设置他们的相对位置
                    if(i == 1)
                        rp.addRule(RelativeLayout.BELOW, empty.getId());
                    else
                        rp.addRule(RelativeLayout.BELOW, (i - 1) * 8);
                }
                else
                {
                    rp.addRule(RelativeLayout.RIGHT_OF, (i - 1) * 8  + j - 1);
                    rp.addRule(RelativeLayout.ALIGN_TOP, (i - 1) * 8  + j - 1);
                    tx.setText("");
                }

                tx.setLayoutParams(rp);
                course_table_layout.addView(tx);
            }
        }

        setCourseMessage(1,jieci[1],"地图制图基础\n9-19(3,4)\n于焕菊\nJ14-305室");
        setCourseMessage(2,jieci[1],"大学英语(3-3)\n1-19(3,4)\n徐育新\nJ1-310室");
        setCourseMessage(3,jieci[1],"概率论与数理统计\n1-9(3,4)\n郑艳林\nJ1-117室");
        setCourseMessage(3,jieci[1],"概率论与数理统计\n1-9(3,4)\n郑艳林\nJ1-117室");
        setCourseMessage(4,jieci[1],"线性代数\n1-11(3,4)\n王新赠\nJ14-121室");
        setCourseMessage(5,jieci[1],"大学物理(B)(2-2)\n1-19(3,4)\n周明东\nJ1-307室");
        setCourseMessage(6,jieci[0],"大学物理(B)(2-2)\n1-19(3,4)\n周明东\nJ1-307室");
        setCourseMessage(7,jieci[2],"大学物理(B)(2-2)\n1-19(3,4)\n周明东\nJ1-307室");

        setCourseMessage(1,jieci[0],"地图制图基础\n9-19(3,4)\n于焕菊\nJ14-305室");
        setCourseMessage(2,jieci[2],"大学英语(3-3)\n1-19(3,4)\n徐育新\nJ1-310室");
        setCourseMessage(3,jieci[3],"概率论与数理统计\n1-9(3,4)\n郑艳林\nJ1-117室");
        setCourseMessage(4,jieci[2],"线性代数\n1-11(3,4)\n王新赠\nJ14-121室");
        setCourseMessage(5,jieci[0],"大学物理(B)(2-2)\n1-19(3,4)\n周明东\nJ1-307室");

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public void setCourseMessage(int xingqi,int jieci,String courseMessage){
        //五种颜色的背景
        int[] background = {R.drawable.course_info_blue, R.drawable.course_info_green,
                R.drawable.course_info_red, R.drawable.course_info_red,
                R.drawable.course_info_yellow};
        // 添加课程信息
        TextView courseInfo = new TextView(this);
        courseInfo.setText(courseMessage);
        //该textview的高度根据其节数的跨度来设置
        RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
                aveWidth * 31 / 32,
                (gridHeight1 - 5) * 2 );
        //textview的位置由课程开始节数和上课的时间(day of week)确定
        rlp.topMargin = 5 + jieci * gridHeight1;
        rlp.leftMargin = 1;
        // 偏移由这节课是星期几决定
        rlp.addRule(RelativeLayout.RIGHT_OF, xingqi);
        //字体剧中
        courseInfo.setGravity(Gravity.CENTER);
        // 设置一种背景
        Random random = new Random();
        courseInfo.setBackgroundResource(background[random.nextInt(5)]);
        courseInfo.setTextSize(12);
        courseInfo.setLayoutParams(rlp);
        courseInfo.setTextColor(Color.WHITE);
        //设置不透明度
        courseInfo.getBackground().setAlpha(222);
        course_table_layout.addView(courseInfo);
    }

}

总结

仅作显示,还是很简单的。当然,如果实用的话,还要加入网络通信。

  • 9
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值