记得看过一篇文章,是说一个人临走之前,列下了想做的最后100件事情,然后拿着这张便签,一件一件地去实现。又想起乔布斯说,如果今天是你的最后一天,你会怎么过?

我有很多事情想做,想写很多的文章,但是时间真的很不够用,妹妹说想把一天当做两天用,但是我想拆成三四天用。。。

这个小程序是我写来放在手机里,写上自己想做的事情,然后一件一件地完成,人生很短,真的很短。

先上一个效果图:

这是一个很简单的小程序,只有三个Activity,不过大家在Demo中见到的只是两个啦,还有左上角点击,可以见到一个“关于”的页面。

1)MainActivity:展示想做的任务,根据未完成的,已完成的,再按照创建时间排序。

2)DetailActivity,进行添加,更新的操作,如果是通过更新页面进去的话,还会展示两个按钮,已完成的任务会展示“Mark Uncomplete”按钮,未完成的任务会显示“Mark Complete”按钮。

3)AboutActivty,这是展示作者信息的页面啦,没有在上面显示出来,里面还有一个初始化sqlitedatabase的按钮。

那么这个小程序中用到了什么样的小技巧呢?

0)SqliteDatabase,当然是我们的数据啦,关于这个的使用,大家可以参考:

Android学习小Demo(8)SQLiteDatabase的使用

1)用到了support-v7 兼容包,主要目的是为了在2.3上面显示ActionBar。

2)页面切换中用到了动画效果,这个其实在之前做音乐播放器的时候也有用过的,不过有点奇怪的是,2.x和4.x,在旋转上的效果有点不一样,具体还没去找原因。

 public boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case android.R.id.home:Intent aboutIntent = new Intent(MainActivity.this, AboutActivity.class);startActivity(aboutIntent);overridePendingTransition(R.anim.push_right_in,R.anim.hold);break;case R.id.action_add:Intent intent = new Intent(MainActivity.this, DetailActivity.class);startActivity(intent);overridePendingTransition(R.anim.scale_in,R.anim.scale_left_out);break;}return super.onOptionsItemSelected(item);}

当点击home按钮,跑到AboutActivity中的效果跟点击“添加”按钮,进行任务编辑页面,是用着不一样的效果的,所以在startActivity之后,要用下面的函数:

    public void overridePendingTransition(int enterAnim, int exitAnim) {try {ActivityManagerNative.getDefault().overridePendingTransition(mToken, getPackageName(), enterAnim, exitAnim);} catch (RemoteException e) {}}

而用到的动画效果,就是基本的Tween Animation了,其中一个scale_in,如下:

<set xmlns:android="http://schemas.android.com/apk/res/android" ><scaleandroid:duration="1000"android:fromXScale="0.5"android:fromYScale="0.5"android:pivotX="50%"android:pivotY="50%"android:toXScale="1.0"android:toYScale="1.0" /><alphaandroid:duration="1000"android:fromAlpha="0.0"android:toAlpha="1.0" /></set>

更多的关于View Animation (Tween Animation),大家有兴趣的可以参考:

Android动画学习Demo(1) 关于ViewAnimation的用法及总结

3)就是自定义的编辑框的样式了,如下:

    <EditTextandroid:id="@+id/etTitle"android:padding="5dip"android:background="@drawable/shape_background" <!-- 自定义的样式 -->这是我在博客中直接加的。。。android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:gravity="center_vertical"android:inputType="text"android:textSize="20sp" />

而其对应的样式如下:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"><gradient android:startColor="#FFFFFF"android:endColor="#FFFFFF"android:centerY="0.2"android:centerColor="#EEEEEE"android:angle="270"android:type="linear"/><stroke android:width="1dp"android:color="#CCCCCC"/>
</shape>

关于这个,大家可以参考:

关于ShapeDrawable应用的一些介绍(中)之Gradient

4)自定义按钮的格式,这个就会用到layer_list和selector的使用了,这个还没有在博客中介绍过,先在这里说一下吧:

在drawable文件夹中,定义几个不一样的样式,如下是layout_button_normal.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" ><item><shapexmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle" ><corners android:radius="5dp" /><solid android:color="#EEEEEE" /><strokeandroid:width="1dp"android:color="#CCCCCC" /></shape></item></layer-list>

类似的,我们可以定义,layout_button_pressed.xml 和 layout_button_selected.xml,然后再定义一个shape_button.xml,在里面使用selector属性:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="true" android:drawable="@drawable/layer_button_pressed"></item><item android:state_focused="true" android:drawable="@drawable/layer_button_selected"></item><item android:drawable="@drawable/layer_button_normal"></item>
</selector>

在这里要注意一点,要把normal的放在最后,因为selector会根据状态从第一个往后面选,如果前面命中了,后面就不理的了,所以如果默认的没有什么状态的就要放在最后面。

然后跟用shape一样,在layout中使用就好:

        android:background="@drawable/shape_button"

5)MainActvity中显示数据,是用listview来显示的,也用到了BaseAdapter,可以参考:

Android中关于Adapter的使用(下)BaseAdapter

6)另外有一个要注意的就是横屏跟坚屏中,布局应该是不一样的,会了使手机横屏看起来效果也比较好看,可以专门为横屏定义一个布局,比如:

如图,我们可以在layout-land中也定义一个叫activity_detail.xml,这样当系统检测到是横屏(landscape)的时候,就会去这个文件夹中寻找布局。

当然,如果嫌麻烦,也可以直接在manifest中直接禁掉,比如对于AboutActivity,我就只想让它竖屏(portrait),如下:

<activityandroid:name="com.lms.todo.AboutActivity"android:label="@string/about_me"android:screenOrientation="portrait" ></activity>

嗯,没错啦,这个小demo就是对前面咱们讲过的那么多知识的一个很好的应用。

光学总归是不够的,还是需要亲自去动手去做,去实践,才能够真正做到用啊。

Android学习小Demo(9)一个To Do List的实现相关推荐

  1. Android学习小Demo(10)ToDoList的改进版之ViewPager显示多个图片

    在TodoList增强版的增加界面上,为了显示图片,我是挖了两块地方,放了两个ImageButton,来显示图片,而且限制了最多只能放两张图片.当两个View都放置图片之后,我就会把"Gal ...

  2. Android学习小Demo(10)ToDoList的加强版

    前两天去超市逛东西,问老板娘这个东西多少钱,那个东西多少钱,但是一两分钟后就搞混了,当时就想,我不是写了一个todo的吗,可以再拍照放上去,这样就有对比啦! 于是兴冲冲地赶回家,把功能给实现了,虽然这 ...

  3. Android学习小Demo(11)一个显示行线的自定义EditText

    今天在处理一个EditText的时候,想着把EditText做成像一本作业本上的纸一样,每一行都可以由线条隔开,具体效果如下: 1)最开始的思路 一开始的想法是很简单的,找出每一行的高度,然后一行一行 ...

  4. Android学习小Demo(12)TodoList实现ListView的分组实现

    很多情况下, 我们想要ListView上面展示的东西是可以分组的,比如联系人列表,国家列表啊,这样看起来数据的展现比较有层次感,而且也有助于我们快速定位到某一个具体的条目上,具体效果请看下图: 这是前 ...

  5. Android学习小Demo(13)Android中关于ContentObserver的使用

    在一些应用上,比如手机银行,QQ,微信等,很多时候我们都需要通过发送验证码到手机上,然后把验证码填上去,然后才能成功地继续去做下面一步事情. 而如果每次我们都要离开当前界面,然后去查收短信,记住验证码 ...

  6. Android学习小Demo(14)Android中关于PopupWindow的使用

    在一些场景中,我们希望能够点击按钮, 然后弹出一个菜单,而这个菜单是显示在屏幕的中央的,那么在Android中可以通过PopupWindow来实现这个效果. 具体效果如下图: 如上图中,我们点击&qu ...

  7. 前端学习小demo:使用HTML+CSS+bootstrap+Vue2.0编写一个简易的音乐播放器(仿网易云)

    具体的操作流程(实现步骤): 1.歌曲搜索 2.歌曲播放 3.歌曲评论 4.播放歌曲的MV(有的歌曲没有MV) 代码编写过程: 1.创建一个Vue项目(前提是安装好了node.js.npm.vue) ...

  8. Android计步器小Demo

    描述 android计步器的实现,自定义的一个弧形进度条,记步通过手机的传感器来实现,也就是说不支持传感器的机子(应该很老的了吧)就没有效果.看看效果图: 自定义View public class S ...

  9. 初次使用Fleck+redis订阅发布实现学习小demo

    https://www.cnblogs.com/SupPilot/p/10396333.html 首先安装Fleck的程序包添加引用下面是客户端代码: 客户端代码: 运行效果: 遇到的问题: Q:通常 ...

最新文章

  1. CNVD初次获取的源代码格式
  2. Java的深拷贝和浅拷贝
  3. unity3d 各个目录的意思
  4. eclipse编辑js卡死解决方案
  5. 【算法1-2】排序(今天刷洛谷了嘛)
  6. fov视场角计算_图像传感器集成计算功能,赋能机器视觉技术
  7. tomcat日志输出控制
  8. AcWing 841. 字符串哈希(字符串Hash)
  9. tensorflow如何微调时如何只训练后两层_XLNet只存在于论文?都替你封装好了还不来用!...
  10. C语言中错误c213是什么意思,DS1302的错误:error c213
  11. dcp9030cdn定影_兄弟DCP-9030CDN打印驱动下载|兄弟Brother DCP-9030CDN一体打印机驱动官方下载 - 维维软件园...
  12. sas mysql乱码_在SAS中如何解决中文乱码问题
  13. java pfx_如何在Java读取PFX格式证书
  14. 74HC138芯片简析
  15. 什么是mysql的慢查询,看完你就懂了
  16. 拜仁超越自我终成夙愿-记2013欧冠决赛
  17. python脚本一键抓考试资料网答案
  18. 青岛科技大学本科毕业论文答辩PPT模板
  19. 在线软件-管理软件 收银管理软件 连锁管理软件 餐饮管理软件 足浴管理软件 会员管理软件...
  20. 《机器学习西瓜书》学习笔记——第七章_贝叶斯分类器_朴素贝叶斯分类器

热门文章

  1. 让Python更加充分的使用Sqlite3
  2. SQL Server-流程控制 2,If...Else 语句
  3. Bootstrap 列偏移\列嵌套\列排序
  4. 【云计算】Kubernetes、Marathon等框架需要解决什么样的问题?
  5. Centos6.6系统root用户密码恢复案例(转)
  6. web前端网站推荐(后续继续补充)
  7. PHP新的连接MySQL方法mysqli
  8. [日志]挂在树上的茶壶
  9. C#中不失真生成缩略图
  10. iptables 垫脚石之 NAT DNAT SNAT 代理 深度理解