android记事本开发笔记之列表显示方式的切换

泡在网上的日子 / 文 发表于2013-07-02 21:46 次阅读 记事本

在看了公司文件管理器的最新UI之后,觉得也有必要给自己的记事本增加一个切换记事列表显示方式的功能。

这里所说的切换显示方式指的是移动应用中很常见的一种设计。这里以ES文件浏览器的界面为例(公司的文件管理器当然不能说...):

  列表显示
 多列显示,也可以称之为平铺显示

第一种单列显示非常适合移动设备屏幕较小的特点,但是就用户体验上来说,不是很直观,尤其是文件管理器,我们已经对window的文件显示方式产生了依赖,单列的操作始终感觉不方便。(其实客观的来说单列显示能显示更多的文件信息,操作起来也反而方便些,这里的不方便是针对直觉而言)。第二种用图标组成的多列排布方式,看起来很直观,一眼望去感觉所有文件净收眼底,仿佛整个手机的文件系统都在自己的掌控之中了。如果用户的手机是像glaxy系列这样的大屏手机,或者是平板,则列图标排布方式最适合。

如果说第一种显示非常实用的话,第二种则是让用户自我感觉良好,未必实用。这里不去研究在操作效率上哪个更优,因为我觉得满足用户的心理需求和满足实用需求同样重要。

因此我也打算跟自己的记事本显示也加上多列显示的功能。

其实多列显示实现起来非常简单,用gridview和listview交替显示就能实现。但是这里有个省事的技巧,那就是gridview和listview可以共用一个adapter。关于这种用法的启发来源于我在网上找到一篇文章:android列表视图切换:GridView和ListView两种方式来显示一个列表 。当然在我的应用里对作者的一些地方进行了修改。

这里讲两种视图的切换代码给大家参考:

private void updateLayout(){
    if (isGridView)
    {
        if (mNoteGridView == null){
            mNoteGridView = (GridView)findViewById(R.id.app_grid);
            mNoteGridView.setAdapter(mAdapter);
            mNoteGridView.setOnItemClickListener(this);
        }
        if(mNoteListView != null){
            mNoteListView.setVisibility(View.GONE);    
        }
        mNoteGridView.setVisibility(View.VISIBLE);
    }else{
        if (mNoteListView == null){
            mNoteListView = (NoteListView)findViewById(R.id.note_list);
            mNoteListView.setAdapter(mAdapter);
            mNoteListView.setOnItemLongClickListener(this);
            mNoteListView.setOnItemClickListener(this);
            setUpListView();
        }
        if(mNoteGridView != null){
            mNoteGridView.setVisibility(View.GONE); 
        }
        mNoteListView.setVisibility(View.VISIBLE);         
    }
}

其中isGridView是一个静态的标志变量,表示该如何显示。从代码中可以看出如下事实:两种视图的切换效果其实是通过显示与隐藏来实现的;两个view都是用的同一个adapter;对列表中每一个元素的点击事件都由一个Listener(即this)来处理。

但是这里遇到了开发中出现的第一个问题:

横竖屏切换的时候gridview的上方会出现大块空白





收藏 赞 (0) 踩 (0)
上一篇:android记事本开发笔记2-记事列表的多选操作
一般来说,在安卓应用中listview的多选操作都是和ActionMode结合起来的。ActionMode可以理解为actionbar的另一种形式,同样可以在菜单中添加动作项,同样可以通过setCustomView自定义动作栏,并且当启动ActionMode之后,它所占据的位置是和actionbar重叠的。
下一篇:客户端提问功能在服务端的修改
纠正之前的错误,在ask模块下,要获取请求数据并可以很方便的在control文件中通过 request(isMobile, 0);这样的方式获取,之前是在index.php文件中设置global全局变量来传递的。 增加客户端提问功能提交数据服务端几乎不需要做什么修改,唯一的修改是提交结
推荐文章
赞助商