好啦,说干咱就干~
项目地址:xingrz/cnode-android
下载
截图
使用环境要求
Android 4.1 (Jelly Bean) 以上
开发环境要求
- Android Studio (canary channel)
- Android SDK
- 5.0 (API 21) SDK Platform
- SDK Tools
- SDK Build-tools 21.1
总之都是最新的。
v1.4.0 主要变更
- 透明的 Action Bar
- LOGO 细节微调
新版的studio基本还行, 感觉比eclipse 流畅。
@xingrz , 帖子页的 发帖人头像放到导航栏的右侧 就好了, 标题可以去掉,下面正文区有标题就ok了 看起来可能比较空一点, 空间利用率也有所提过, :)
囧rz的apklib~, 又找了个方案: https://github.com/sirthias/pegdown 他支持 gfm -> html , 然后 android中 textview.setText(Html.fromHtml(html)) , 这篇文章还提到了图片显示的问题 http://www.cnblogs.com/playing/archive/2011/03/17/1987033.html 这样看来,基本应该可以解决了,@xingrz 试试
@fish 噗。。。PegDown 依赖的 parboiled-java 和 parboiled-core 里竟然有同名的类,于是编译报错了。。。神烦
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lorg/parboiled/Action;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:302)
at com.android.dx.command.dexer.Main.run(Main.java:245)
at com.android.dx.command.dexer.Main.main(Main.java:214)
at com.android.dx.command.Main.main(Main.java:106)
@alsotang 本身 iOS 和 Android 的设计风格不一样,一致倒不用吧,不过大体上已经是一致的啦哈哈,UI都好说,现在还是在头疼 MarkDown 的渲染=。=不知道Android 是不是也有这个问题。。
@callmewhy Markdown 的处理的确是个大问题。。。一个是转换,一个是呈现。
转换的话我给 nodeclub 提了 issue 了争取在 API 里增加转换好 HTML 的内容吧。
呈现的话,Android 的 TextView 提供了有限度的 HTML 支持(实际上是将 HTML 解析成它自己的富文本结构 Spanned
)但是对 CSS 和 ul
li
这些非文字的元素估计够坑爹。。。
这层楼是用来测试样式的。 这是换行。
这是第二段了。粗体,斜体,粗斜体。我是链接。
下面是分割线
上面是分割线
一级标题
二级标题
三级标题
标题到四级就够了
这里有一段缓冲
- 第一项
- 第二项
- 二一
- 二二
- 第三项
- 第一点
- 第二点
- 里面的无符号一
- 无符号二
- 第三点
- 第四点
这是最后一段
@alsotang CSS。。。想多了。。。Android 上面的 TextView 哪支持 CSS。。。
TextView 吃的是 CharSequence 类型,在上面可以包含一些控制符,实现很基本很基本的样式(比如字体字号颜色什么的)
用 WebView 嘛,资源占用大,而且大小什么的不好控制(打个 HTML 的比方就相当于每一层楼都是一个 iframe)
于是只好自己解析 HTML 标签后用字符堆出来了。。。
求更好的实现方式。。。。
呀不对为什么我会在 Node 社区讨论这么深入的 Android 话题。。。 为什么身为艺术生的我要写算法 以上是样式测试。
@libinqq 应该问题不大,你试试把项目里的 minSdkVersion
改到 7
编译看看。
ActionBar 和一些 Material Design 控件我都是用 Support Library v7 的,所以理论上可以支持到 2.1。而且我也没用到什么版本特定的特性。
只是我觉得没必要罢了。
@libinqq 我刚刚编译了一下看了 Lint,其实兼容到 2.1 的问题也不大。
HtmlTagHandler
里面用了 LinkedList
的 removeFirstOccurrence
方法是 2.3 才有的,自己用遍历实现一个就是。
topic_item.xml
里面用到了 android:background="?android:attr/selectableItemBackground"
来显示触摸反馈,是 3.0 才有的。其实这些版本兼容问题,Android 还是非常好做「优雅降级」的:
- 自己用 selector 写个触摸变色的 drawable 放到
res/drawable
- 将现在这个
topic_item.xml
放到res/layout-v11
里,表示 3.0 及以上才调用它 - 复制一个调用自己写的 drawable 的
topic_item.xml
丢到res/layout
里,表示 3.0 以下用它
Android 做优雅降级是很简单的。只是我这里没必要而已。