Android UI Libs之AndroidTreeView

作者: lavor | 来源:发表于2016-05-27 18:14 被阅读952次

    Android UI Libs之AndroidTreeView


    1. 说明


    AndroidTreeView,顾名思义,Android上面的树形视图。
    该库的特点:

    • 可扩展与销毁的N叉树
    • 为节点自定义值,视图,样式
    • 旋转屏幕后保存状态
    • 节点的选中模式
    • 动态添加,删除节点

    注意:接近Android4.0的版本树的层次太深可能很容易导致程序崩溃。

    2. 配置


    在模块的build.gradle中添加依赖:compile 'com.github.bmelnychuk:atv:1.2.+'

    3. 基本使用


        /**
         * AndroidTreeView的基本使用
         */
        public void baseUsage(){
            //创建根节点
            TreeNode root = TreeNode.root();
            //创建一般节点
            TreeNode parent = new TreeNode("父节点");
            TreeNode child0 = new TreeNode("子节点1");
            TreeNode child1 = new TreeNode("子节点2");
            //添加子节点
            parent.addChildren(child0, child1);
            root.addChild(parent);
            //创建树形视图
            AndroidTreeView tView = new AndroidTreeView(this, root);
            //将树形视图添加到layout中
            layout.addView(tView.getView());
        }  
    

    程序运行界面如下:

    4. 高级使用


    我们可以看到上一节基本使用中的界面很丑,节点中只有文本信息,我们可以为节点自定义视图来提高用户体验。

    为节点创建已定义视图,继承TreeNode.BaseNodeViewHolder并重写createNodeView方法:

    public class MyHolder extends TreeNode.BaseNodeViewHolder<IconTreeItem> {
        ...
        @Override
        public View createNodeView(TreeNode node, IconTreeItem value) {
            final LayoutInflater inflater = LayoutInflater.from(context);
            final View view = inflater.inflate(R.layout.layout_profile_node, null, false);
            TextView tvValue = (TextView) view.findViewById(R.id.node_value);
            tvValue.setText(value.text);
    
            return view;
        }
        ...
        public static class IconTreeItem {
            public int icon;
            public String text;
        }
    }
    

    将节点与ViewHolder联系起来:

      IconTreeItem nodeItem = new IconTreeItem();
      TreeNode child1 = new TreeNode(nodeItem).setViewHolder(new MyHolder(mContext));  
    

    本库中示例中有8个自定义的ViewHolder,我利用其中之一IconTreeItemHolder来实现自定义节点视图:

        /**
         * AndroidTreeView的高级使用:为节点自定义视图
         */
        public void customViewForNode(){
            //创建根节点
            TreeNode root = TreeNode.root();
            //创建节点item
            IconTreeItemHolder.IconTreeItem nodeItem = new IconTreeItemHolder.IconTreeItem(R.string.ic_laptop,"我的设备");
            IconTreeItemHolder.IconTreeItem nodeItem2 = new IconTreeItemHolder.IconTreeItem(R.string.ic_folder,"文件夹");
            IconTreeItemHolder.IconTreeItem nodeItem3 = new IconTreeItemHolder.IconTreeItem(R.string.ic_drive_file,"文件");
            //创建一般节点
            TreeNode device = new TreeNode(nodeItem);
            TreeNode fold = new TreeNode(nodeItem2);
            TreeNode file = new TreeNode(nodeItem3);
            //添加子节点
            fold.addChild(file);
            device.addChild(fold);
            root.addChild(device);
            //创建树形视图
            AndroidTreeView tView = new AndroidTreeView(this, root);
            //设置树形视图开启默认动画
            tView.setDefaultAnimation(true);
            //设置树形视图默认的样式
            tView.setDefaultContainerStyle(R.style.TreeNodeStyleCustom);
            //设置树形视图默认的ViewHolder
            tView.setDefaultViewHolder(IconTreeItemHolder.class);
            //将树形视图添加到layout中
            layout.addView(tView.getView());
        }  
    

    程序运行后的界面是这样的:

    程序源代码下载:UILibs

    相关文章

      网友评论

      本文标题:Android UI Libs之AndroidTreeView

      本文链接:https://www.haomeiwen.com/subject/uvptdttx.html