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

记得看过一篇文章,是说一个人临走之前,列下了想做的最后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,如下:



    

    


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

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

Android学习小Demo(9)一个To Do List的实现_第1张图片

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

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


        

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

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

你可能感兴趣的:(Android学习小Demo(9)一个To Do List的实现)