记得看过一篇文章,是说一个人临走之前,列下了想做的最后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);
}
public void overridePendingTransition(int enterAnim, int exitAnim) {
try {
ActivityManagerNative.getDefault().overridePendingTransition(
mToken, getPackageName(), enterAnim, exitAnim);
} catch (RemoteException e) {
}
}
而用到的动画效果,就是基本的Tween Animation了,其中一个scale_in,如下:
Android动画学习Demo(1) 关于ViewAnimation的用法及总结
3)就是自定义的编辑框的样式了,如下:
这是我在博客中直接加的。。。
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center_vertical"
android:inputType="text"
android:textSize="20sp" />
而其对应的样式如下:
关于这个,大家可以参考:
关于ShapeDrawable应用的一些介绍(中)之Gradient
4)自定义按钮的格式,这个就会用到layer_list和selector的使用了,这个还没有在博客中介绍过,先在这里说一下吧:
在drawable文件夹中,定义几个不一样的样式,如下是layout_button_normal.xml:
-
类似的,我们可以定义,layout_button_pressed.xml 和 layout_button_selected.xml,然后再定义一个shape_button.xml,在里面使用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),如下:
嗯,没错啦,这个小demo就是对前面咱们讲过的那么多知识的一个很好的应用。
光学总归是不够的,还是需要亲自去动手去做,去实践,才能够真正做到用啊。