平时使用的"超级课程表"可以从根据学号直接从教务系统中导入对应的课程表,确实方便。作为开发人员,自然会想自己去实现。当然,抓数据这个我不在行,做Android的就实现它的布局了。

很明显,这课表就是原生的(不是什么hXXX5)。先上效果图


大体思路

分析: 1.一天有12节课,对于手机屏幕不大的手机如果全部显示则显得太挤。因此下面的课程是支持滑动的,但是表头不能    让它滑动,不然就看不到是星期几,用户体验不好,不够人性化。 2.课的节数是不一定的,也就是说这个布局不是死的,课程需要动态添加。

具体: 1. 首先是一个线性布局,包含两个部分 1) 表头(周一~周日)      2) 课程部分

2.表头直接一个水平方向的线性布局,通过权值进行均分即可。

3.课程主体部分细分:

   1)使用ScrollView实现对超出区域的部分进行滑动。

   2)左侧的课的节数与表头部分类似,只是将水平方向改成垂直方向。

   3)右边课程部分细分:

  • 一个水平方向的线性布局将七天包含进来
  • 每一天再用一个相对布局包含(设置权值进行水平均分)
  • 在代码中动态向相对布局中添加TextView(这也是为什么上面使用相对布局的原因)


XML中的布局基本就是这样,好多细节需要处理,具体看我GitHub上的完整代码。

接下来就是动态添加TextView的代码:

生成TextView

private TextView createTv(int start,int end,String text){        TextView tv = new TextView(this);        /*         指定高度和宽度         */        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(gridWidth,gridHeight*(end-start+1));        /*        指定位置         */        tv.setY(gridHeight*(start-1));        tv.setLayoutParams(params);        tv.setGravity(Gravity.CENTER);        tv.setText(text);        return tv;    }


添加TextView:

private void addView(int i,int start,int end,String text){        TextView tv;        switch (i){            case 1:                layout = (RelativeLayout) findViewById(R.id.Monday);                break;            case 2:                layout = (RelativeLayout) findViewById(R.id.Tuesday);                break;            case 3:                layout = (RelativeLayout) findViewById(R.id.Wednesday);                break;            case 4:                layout = (RelativeLayout) findViewById(R.id.Thursday);                break;            case 5:                layout = (RelativeLayout) findViewById(R.id.Friday);                break;            case 6:                layout = (RelativeLayout) findViewById(R.id.Saturday);                break;            case 7:                layout = (RelativeLayout) findViewById(R.id.Sunday);                break;        }        tv= createTv(start,end,text);        tv.setBackgroundColor(Color.argb(100,start*5,(start+end)*20,0));        layout.addView(tv);    }


完整代码:https://github.com/MummyDing/SchoolTimetable(不要吝啬你的Star哈)

【转载请注明出处】

Author: MummyDing

出处:http://blog.csdn.net/mummyding/article/details/48549573


更多相关文章

  1. Android(安卓)RecyclerView瀑布流布局添加Footer实现上拉加载
  2. 【Android(安卓)界面效果17】Android手机平板两不误,使用Fragment
  3. Android布局整合include界面控件(重用布局)
  4. Android开发者选项之GPU过度绘制
  5. Android(安卓)UI之实现Material化的下拉选择列表拒绝丑陋的Spinn
  6. [置顶] Android(安卓)自定义ViewGroup实现整个Item布局竖直跑马
  7. android 图片下面显示文字
  8. Android(安卓)RecyclerView网格布局示例解析
  9. Android(安卓)日期选择控件

随机推荐

  1. Android的有关EditText的能多行显示但无
  2. Android 修改framework实现 全局唯一laun
  3. avd 配置
  4. android-Handler源码解析
  5. Android 平台架构
  6. android 获取listview checkbox选择的值
  7. android性能优化(一)内存管理
  8. Android 基础面试题目
  9. 最全的Android项目结构以及功能
  10. Android去除EditText的聚焦Focuse