android实现课程表界面

这是我第一次写博客,也是刚开始学习android,做了一个课程表界面的小练习。做的过程中遇到了一些问题也参考了许多人的解决方法,希望在这里总结下,就当做学习笔记。如果能对那些像我一样的初学者有一点点帮助就更好啦,要是其中有错误还望赐教,哈哈~~~

目录

    • 目录
    • 界面展示
    • 课程表界面布局
    • java代码中动态添加按钮
    • 自定义AlertDialog


界面展示

这是最后做出的效果图
这里写图片描述
点击课程按钮出现课程具体信息
这里写图片描述

课程表界面布局

根据插入的这个布局图片来说一下,棕色的框为RelativeLayout,深蓝色为LinearLayout,浅蓝色为TextView。(图的下半部分中的八列的布局一致,所以只画出了一列,关于为什么在RelativeLayout中又嵌套了一层LinearLayout,是为了应用LinearLayout的weight这个属性让每节课的TextView能均匀分布)。
简单说明以下由于布局比较多,所以要想给界面加上背景图片就应该讲一层层的布局设置成透明色#00000000,前两位是设置透明度的,0-f逐渐变得不透明。
这里写图片描述

<RelativeLayout 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:background="@drawable/syllabus_bg"><TextView
        android:id="@+id/weekTextView"android:layout_width="match_parent"android:layout_height="35dp"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:background="#80ffffff"android:text="第四周"android:gravity="center"android:textColor="#a4c2f4"android:textSize="16sp" /><!--第一行  --><LinearLayout
        android:id="@+id/weekLine"android:layout_marginTop="35dp"android:layout_width="match_parent"android:layout_height="20dp"android:orientation="horizontal"android:background="#00000000"><TextView
            style="@style/WeekTitleTextView"android:id="@+id/blankTextView"android:layout_weight="0.5" /><TextView
            style="@style/WeekTitleTextView"android:id="@+id/monTextView"android:text="周一" /><TextView
            style="@style/WeekTitleTextView"android:id="@+id/tueTextView"android:text="周二" /><TextView
            style="@style/WeekTitleTextView"android:id="@+id/wedTextView"android:text="周三" /><TextView
            style="@style/WeekTitleTextView"android:id="@+id/thursTextView"android:text="周四" /><TextView
            style="@style/WeekTitleTextView"android:id="@+id/friTextView"android:text="周五" /><TextView
            style="@style/WeekTitleTextView"android:id="@+id/satTextView"android:text="周六" /><TextView
            style="@style/WeekTitleTextView"android:id="@+id/sunTextView"android:text="周日" /></LinearLayout><!-- 课程表body部分 --><LinearLayout
        android:id="@+id/bodyLayout"android:layout_marginTop="55dp"android:layout_width="match_parent"android:layout_height="fill_parent" android:orientation="horizontal"android:background="#00000000"> <include
            layout="@layout/number_column_layout" /><include
            layout="@layout/course_column_layout" /><include
            layout="@layout/course_column_layout" /><include
            layout="@layout/course_column_layout" /><include
            layout="@layout/course_column_layout" /><include
            layout="@layout/course_column_layout" /><include
            layout="@layout/course_column_layout" /><include
            layout="@layout/course_column_layout" /></LinearLayout></RelativeLayout>

java代码中动态添加按钮

我的想法是在onCreateview()方法中实现动态添加按钮。把课程信息存放在一个List中,然后遍历这个List,在for循环中将button覆盖在相应课程的TextView上。由于button需要设置位置和大小,所以需要获取到TextView的height和width,然而在onCreateView中是无法获取的,原因是布局还没有加载好,获取到的值永远为0。所以可以用TextView.post(),在其中发起一个线程,去获取TextView的hight和width,之后将button的位置和内容设置好即可。
部分代码如下:

    @Overridepublic View onCreateView(LayoutInflater inflater,ViewGroup parent,Bundle savedInstanceState){View v = inflater.inflate(R.layout.fragment_syllabus, parent,false);bodyLayout = (LinearLayout)v.findViewById(R.id.bodyLayout);for(final Course temp : list){final RelativeLayout whichDayRelativeLayout = (RelativeLayout)bodyLayout.getChildAt(temp.getCourse_whichDay());whichDayLinearLayout =(LinearLayout) whichDayRelativeLayout.getChildAt(0); courseTextView = (TextView)whichDayLinearLayout.getChildAt(0);courseTextView.post(new Runnable() {@Overridepublic void run() {height = courseTextView.getHeight();width = courseTextView.getWidth();final Button button = new Button(getActivity());button.setText(temp.getCourse_name()+"\n"+temp.getCourse_address());button.setTextSize(12);button.setTextColor(Color.parseColor("#333333"));button.setBackgroundResource(R.drawable.course_button);button.setBackgroundColor(Color.parseColor(myColor[temp.getCourse_id()%10]));button.setWidth(width);button.setHeight(height*(temp.getCourse_duration()));button.setTranslationY((float) ((height+0.5)*(temp.getCourse_number()-1)));button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubAlertDialog alertDialog = new AlertDialog.Builder(getActivity()).create();alertDialog.setCanceledOnTouchOutside(true);alertDialog.show();Window win = alertDialog.getWindow();// 设置窗口的内容页面win.setContentView(R.layout.course_alert_dialog);alertTextView = (TextView)win.findViewById(R.id.alertTextView);alertTextView.setText(temp.getCourse_name()+"\n"+temp.getCourse_address()+"\n"+temp.getCourse_teacher()+"\n"+temp.getCourse_beginWeek()+"-"+temp.getCourse_endWeek()+"周"+"\n第"+temp.getCourse_number()+"节-第"+(temp.getCourse_duration()+temp.getCourse_number()-1)+"节");alertTextView.setBackground(button.getBackground());}});whichDayRelativeLayout.addView(button);}});}return v;}

自定义AlertDialog

正常的AlertDialog是带有边框的,而我这个展示课程具体信息的AlertDialog是 不需要边框的,所以需要自己定义布局,具体代码如下(是上一部分代码的一部分):

AlertDialog alertDialog = new AlertDialog.Builder(getActivity()).create();alertDialog.setCanceledOnTouchOutside(true);alertDialog.show();Window win = alertDialog.getWindow();// 设置弹出对话框的布局win.setContentView(R.layout.course_alert_dialog);alertTextView = (TextView)win.findViewById(R.id.alertTextView);alertTextView.setText(temp.getCourse_name()+"\n"+temp.getCourse_address()+"\n"+temp.getCourse_teacher()+"\n"+temp.getCourse_beginWeek()+"-"+temp.getCourse_endWeek()+"周"+"\n第"+temp.getCourse_number()+"节-第"+(temp.getCourse_duration()+temp.getCourse_number()-1)+"节");//这里是让对话框的颜色和课程button的颜色一致。                         alertTextView.setBackground(button.getBackground());

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/36721.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信课程表小程序(0基础教你用,从入门到发布)

微信小程序课程表&#xff0c;微信小程序开发 目录 1.效果图&#xff1a; 2.准备工具&#xff1a; 3.下载代码 4.部署项目 1.打开微信小程序&#xff1a; 2.AppID查看方式: 3.拿出你的小手机扫码、 5.修改课程 6.项目发布 演示&#xff1a; 1.效果图&#xff1a; 2.准备工…

课程表管理系统

课程表管理系统 1.学生/教师用户登录界面 2.首页 3.课程详细 4.保存csv功能 5.管理员登录界面 6.管理员后台界面 7.代码详解 8.项目部署 课程表管理系统 1.学生/教师用户登录界面 2.首页 3.课程详细 点击已有课程&#xff0c;可弹出课程详细数据。 4.保存csv功能 点击…

Android课程表App

最近写了个简单的Android 课程表App,我是个初学者,这个App里使用了&#xff1a; Android内置的SQLite数据库储存课程数据。课程的视图用CardView卡片视图。 课程的View是动态加入的,动态添加View的好处是很灵活 如果靠静态的XML构建的话就有点难扩展了&#xff0c;因为你不知道…

微信小程序实现课程表

1.实现效果 2.实现步骤 2.1 获取当前日期一周数据 Date.getDay(): getDay() 方法返回指定日期是星期几&#xff08;从 0 到 6,星期日为 0&#xff0c;星期一为 1&#xff0c;依此类推。&#xff09;。 var d new Date();//2022-8-11 var n d.getDay();//4--周四Date.getDate…

学生表,选课表,课程表

课后作业 一、用Navicat Premium 12软件创建三张表&#xff1a;学生表、选课表、课程表 学生表(学号, 姓名, 性别, 年龄, 电话) - 学号是字符串类型 选课表(学号, 课程号, 成绩) 课程表(课程号, 课程名, 课时数) - 课程号是字符串类型 学生表&#xff1a; 选课表&#xff1a; …

Android课程表的设计开发

Android课程表的设计开发 下载链接 鉴于很多人需要源码&#xff0c;这里给下代码。 下载地址&#xff08;需要5积分&#xff0c;支持下&#xff08;积累点积分。。。&#xff09;&#xff0c;没有积分的直接留言邮箱&#xff0c;我发给你或者找其他已经发过的人要下&#xf…

超级课程表课表的界面的实现

由于毕业设计有一个功能模块是课程表,就想模仿一下超级课程表的界面,可是开始做的时候却没有一点头绪,百度google均无果,在CSDN和知乎上提问了也没人回答,总之自己鼓捣了几天还是弄出来了,虽然实现的方法很挫。。。因为有好几个人都发私信问我怎么实现的,现在毕设做完了…

尤瓦尔最新演讲:人工智能不需要意识就可以毁灭人类文明

我们现在必须与一种新的大规模杀伤性武器作斗争&#xff0c;这种武器可以消灭我们的精神和社会世界。核武器和人工智能最大的区别是&#xff0c;核武器不能制造更强大的核武器。 但人工智能可以产生更强大的人工智能&#xff0c;所以我们需要在人工智能失去控制之前迅速采取行动…

chatgpt赋能python:Python绘制雷达图教程

Python绘制雷达图教程 在数据分析和可视化中&#xff0c;雷达图是一种非常有用的可视化工具&#xff0c;用于显示多个变量的相对大小。在这篇文章中&#xff0c;我们将介绍如何使用Python绘制雷达图&#xff0c;使用Matplotlib和Seaborn这两个Python数据可视化库。 准备数据 …

测试职业的发展方向

测试职业转型 很多工作了几年的测试人员都会产生迷惘&#xff0c;随着经验的累积和技能的提升&#xff0c;会有一个瓶颈期。未来应该往哪个方向发展&#xff0c;之前说过做测试要懂得很多技能和知识。正因为如此测试可以发展的方向选择面就非常广了&#xff0c;既可以继续在测试…

重塑职业未来:在竞争激烈的职场上脱颖而出的关键策略

在竞争激烈的职场上&#xff0c;各种职场难题时常出现&#xff0c;如何进行有效沟通、如何应对工作压力、如何提升职业能力等&#xff0c;这都是需要去克服的问题。下面分享一下职场老人的经验&#xff01; 一、你遇到过哪些职场问题&#xff1f;分享一下你是怎么解决的呢&…

未来软件测试人员会失业?看ChatGPT怎么说

Q&#xff1a;未来软件测试人员会失业&#xff1f; A&#xff1a;虽然自动化测试和AI技术的应用已经带来了一定的冲击&#xff0c;但是软件测试人员未来失业的可能性非常低。以下是几个原因&#xff1a; 软件测试是软件开发生命周期的重要环节。在软件开发过程中&#xff0c;…

AI_News周刊:第二期

2023.02.13—2023.02.17 1.ChatGPT 登上TIME时代周刊封面 这一转变标志着自社交媒体以来最重要的技术突破。近几个月来&#xff0c;好奇、震惊的公众如饥似渴地采用了生成式人工智能工具&#xff0c;这要归功于诸如 ChatGPT 之类的程序&#xff0c;它对几乎任何查询做出连贯&a…

各大工作室都在用的视觉特效软件,开启你的虚拟制作之旅

为您的虚拟制作设置的免费视觉特效工具 使用领先工作室们所信任的创意资源管理软件&#xff0c;免费开始您的下一个虚拟制作项目。 花更多时间在创作上&#xff0c;更少时间在设置上 增强型Studio包 —— 现已可以部署在微软 Azure 上使用 —— 包含了您所需要的所有工具&…

博主,公司让我们无限期放假!

推荐阅读&#xff1a;程序员降薪40%去国企&#xff0c;只因要35岁了&#xff01;值得吗&#xff1f; 下午收到一位网友的求助&#xff1a; 公司无故辞退员工&#xff0c;却不按正常裁员程序走。公司以没钱为由&#xff0c;给出2种方案&#xff1a; 一个月赔偿&#xff1b;无限期…

网址被腾讯拦截的处理方法

事发于2021年6月5日&#xff0c;为主域名的其中一个子域名被拦截&#xff0c;主域名未被拦截&#xff0c;原因为恶意广告&#xff0c;恶意营销。 网站内容为普通商城类&#xff0c;不存在强制推广&#xff0c;于是进行站长申诉&#xff0c;反馈结果为驳回~ 2021年6月7日&#…

文远知行COO张力离职;天翼云宣布进军国际市场;百家云发布AIGC新品;深兰科技推出大语言模型SaaS平台丨每日大事件...

‍ ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 企业动态 文远知行COO张力离职 文远知行COO张力日前在个人社交平台发布疑似离职的相关动态。对此&#xff0c;文远知行方面今日回应称&#xff1a;“由于个人及家庭原因&#xff0c;文远知行COO张力最近决定辞任&#xf…

对话数十位学术合作代表:如何提升前沿技术在商业领域的落地应用?

从去年火出天际的元宇宙&#xff0c;到今年年初的现象级应用 ChatGPT&#xff0c;科技圈似乎从不缺少热门的技术概念与话题。尤其是在云计算、人工智能、大数据等技术呈爆发式增长的背景下&#xff0c;我们愈发体会到前沿技术对于产业产生的深远影响&#xff0c;而这也延伸出了…

Gartner:数字经济如火如荼,企业该做哪些准备?

从“数据二十条”发布&#xff0c;到国家数据局成立&#xff0c;广大中国企业应该从中嗅到哪些重要信号&#xff1f; “数据二十条”与国家数据局 关注数据领域的小伙伴估计都知道&#xff0c;我国近年来一直高度重视数字经济的发展&#xff0c;尤其是近期更是接连出台针对数据…

快商通与美亚、华大共同申报的AI课题被纳入科技局重大科技项目

近日&#xff0c;厦门市科学技术局对“2022年工业及信息化领域科技计划项目”进行公示&#xff0c;快商通与美亚柏科、华侨大学联合申报的“基于深度学习的可信多媒体鉴定关键技术研究及其产业化应用”课题成功入选厦门市重大科技项目&#xff01; ChatGPT震惊全球、效果爆棚&a…