|
3 | 3 | [](https://travis-ci.org/LeeReindeer/Tree2View) |
4 | 4 |
|
5 | 5 | > TreeView implementation in Android. |
6 | | -> |
7 | | -> [数据结构课程设计](http://leezoom.xyz/2018/01/02/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E8%AF%BE%E7%A8%8B%E8%AE%BE%E8%AE%A1%E6%8A%A5%E5%91%8A/) |
8 | 6 |
|
9 | | -## 主要功能 - Features |
| 7 | +[中文版](/README-ZH.md) |
10 | 8 |
|
11 | | -|TreeView|File Explorer| |
| 9 | +## Features |
| 10 | + |
| 11 | +|TreeView|File Explorer(Advanced Example)| |
12 | 12 | |--------|----------| |
13 | | -|①多级分层的树结构视图 | 基本的文件管理器布局| |
14 | | -|②记忆展开状态 | 自动展开上次打开未关闭的目录| |
15 | | -|③使用适配器设计模式,用户可自定义 TreeAdapter | 对不同类型的文件显示不同的Icon | |
16 | | -|④动态增删节点 | 删除和添加文件后可自动刷新状态 | |
17 | | -|⑤选择模式 | 长按节点进行文件操作(Copy, Cut, Rename, Delete) | |
18 | | -|⑥动画支持,内置增删节点的动画 | 增删文件时带有动画 | |
| 13 | +|①Multi-level tree view | Basic file manager layout| |
| 14 | +|②Remember expansion state | Automatically expand the last unclosed directory| |
| 15 | +|③Customize TreeAdapter | Different types of documents show different Icon | |
| 16 | +|④Dynamic add and delete nodes | refresh status after delete and add files | |
| 17 | +|⑤Select listener | Long press node for file operations (Copy, Cut, Rename, Delete) | |
| 18 | +|⑥Animation support | Add or delete files with animation | |
19 | 19 |
|
| 20 | +You can also see [a more simple example](/demo/app/src/main/java/xyz/leezoom/tree2view_demo/MainActivity.java). |
20 | 21 |
|
21 | | -## 实现原理 - Implement |
| 22 | +## Implement |
22 | 23 |
|
23 | | -- TreeView 继承自 ListView |
| 24 | +- TreeView extends from ListView. |
24 | 25 |
|
25 | | -- DFS遍历可展开的树节点,转化为List 与 [TreeAdapter](https://github.com/LeeReindeer/Tree2View/blob/master/treeview/src/main/java/xyz/leezoom/view/treeview/adapter/TreeAdapter.java) 进行适配。 |
| 26 | +- DFS travel the expandable tree node, and convert it to List which adapt with [TreeAdapter](https://github.com/LeeReindeer/Tree2View/blob/master/treeview/src/main/java/xyz/leezoom/view/treeview/adapter/TreeAdapter.java). |
26 | 27 |
|
27 | | -- 分级的视觉效果通过 [SimpleTreeAdapter](https://github.com/LeeReindeer/Tree2View/blob/master/treeview/src/main/java/xyz/leezoom/view/treeview/adapter/SimpleTreeAdapter.java)(通过对不同深度的节点设置不同的**缩进**)来实现的。 |
| 28 | +- Use [SimpleTreeAdapter](https://github.com/LeeReindeer/Tree2View/blob/master/treeview/src/main/java/xyz/leezoom/view/treeview/adapter/SimpleTreeAdapter.java) ot set different indentation on nodes of different depths. |
28 | 29 |
|
29 | | -- 使用 [DefaultTreeNode](https://github.com/LeeReindeer/Tree2View/blob/master/treeview/src/main/java/xyz/leezoom/view/treeview/module/DefaultTreeNode.java) 来(用链表保存子节点)增删节点。这样就实现了视觉效果和数据结构统一的设计。 |
| 30 | +- Use LinkedList to store node's children, see [DefaultTreeNode](https://github.com/LeeReindeer/Tree2View/blob/master/treeview/src/main/java/xyz/leezoom/view/treeview/module/DefaultTreeNode.java). |
30 | 31 |
|
31 | | -## 效果预览 - Preview |
| 32 | +## Preview |
32 | 33 |
|
33 | 34 |  |
34 | 35 |
|
35 | 36 |  |
36 | 37 |
|
37 | | -## 下载 - Download |
| 38 | +## Download |
| 39 | + |
| 40 | +> To-do: upload to jCenter. |
38 | 41 |
|
39 | | -> 未上传到 `jCenter()`,可直接clone本项目使用。 |
| 42 | +1. But now, you can just clone this repo to use Tree2View. |
40 | 43 |
|
41 | 44 | ```git |
42 | 45 | git clone git@github.com:LeeReindeer/Tree2View.git |
43 | 46 | ``` |
44 | 47 |
|
45 | | -Then open your project in Android Studio, then Click `FIle` -> `New` -> `Import Module`, to import this |
| 48 | +2. Open your project in Android Studio, then Click `FIle` -> `New` -> `Import Module`, to import this |
46 | 49 | module. |
47 | 50 |
|
48 | | -And add dependence in your `build.gradle` |
| 51 | +3. Add dependence in your `build.gradle` |
49 | 52 | ```groovy |
50 | 53 | implementation project(path: ':treeview') |
| 54 | + //or |
| 55 | + compile project(path: ':treeview') |
51 | 56 | ``` |
52 | 57 |
|
53 | | -## 使用 - Usage |
| 58 | +## Usage |
| 59 | + |
| 60 | +1. Add in your xml: |
54 | 61 |
|
55 | 62 | Feel free to use it as `ListView`. |
56 | 63 |
|
57 | | -XML: |
58 | 64 | ```xml |
59 | 65 | <xyz.leezoom.view.treeview.TreeView |
60 | 66 | android:id="@+id/tree_view" |
|
67 | 73 | </xyz.leezoom.view.treeview.TreeView> |
68 | 74 | ``` |
69 | 75 |
|
70 | | -Kotlin(Java is similar whit it) |
| 76 | +2. Add children in Kotlin code(Java is similar whit it) |
71 | 77 | ```kotlin |
72 | 78 | var root :DefaultTreeNode? = DefaultTreeNode("Root") |
73 | | - val treeView = TreeView(this@MainActivity, root) |
| 79 | + tree_view.root = root |
74 | 80 | val child1 = DefaultTreeNode("Child1") |
75 | 81 | val child2 = DefaultTreeNode("Child2") |
76 | 82 | // After create a node your should immediately add it. |
77 | 83 | root.addChild(child1) |
78 | 84 | root.addChild(child2) |
79 | 85 | val child3 = DefaultTreeNode("Child3") |
80 | 86 | child1.addChild(child3) |
| 87 | + //whether the root's children is expanded by default |
| 88 | + tree_view.isRootVisible = true |
| 89 | + //animation |
| 90 | + tree_view.isDefaultAnimation = true |
81 | 91 | ``` |
| 92 | +3. Add click listener and select listener |
| 93 | + |
| 94 | +Tree2View has a default click listener, but it's ok to add your own.You can refer to [here](https://github.com/LeeReindeer/Tree2View/blob/master/app/src/main/java/xyz/leezoom/tree2/activity/MainActivity.kt#L111). |
82 | 95 |
|
83 | | -If you want to use customized item view, you should implement `TreeAapater`, like this: |
| 96 | +4. If you want to use customized item view, you should implement `TreeAapater`, like this: |
84 | 97 | ```java |
85 | 98 | public class FileTreeAdapter extends TreeAdapter<FileItem> { |
86 | 99 | //resourceId is your customized view resourceId, please use RelativeLayout, and let view neighbour. |
|
0 commit comments