STONE说tx早有android版 QQ空间了,于是下载看看,感觉还行,功能太少了。不甘心,看看里面有什么好玩的,不会是个wrapper web的吧,于是决定反编译看个究竟。虽然大家都在骂腾讯,但不可否认的是,他们产品的用户体验做的很好, 搞android开发,也可以看看他们产品,好的界面设计,我们也可以拿来用。前文已经介绍了一些反编译apk的工具,搞软件开发的,至少有那么一点hack精神,学会反编译apk是Android应用程序开发的一项基本技能。
UI
界面是淡蓝色风格,也是我比较喜欢的风格,美工图片作图比较到位。看看下边的Tab吧,跟web一样了.
开始琢磨一下,到底用什么东东做的?原来是自定义的tabTextStyle,里面还有非常多自定义的view, style,正应那句话:“优秀的组件都是自定义的”。
personcenterheaderview.xml :
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
android:orientation="vertical"
android:background="@drawable/homepageheadbg"
android:focusable="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:orientation="horizontal"
android:id="@id/LinearLayoutUserMood"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1.0">
<LinearLayout
android:gravity="center"
android:background="@drawable/personhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4.0px"
android:layout_marginTop="5.0px">
<ImageView
android:id="@id/ImageViewUserIcon"
android:layout_width="49.0dip"
android:layout_height="49.0dip"
android:scaleType="centerCrop" />
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:id="@id/saynamegroup"
android:background="@drawable/saydialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8.0px"
android:layout_marginRight="10.0px"
android:layout_weight="1.0">
<TextView
android:textSize="14.0px"
android:textColor="@color/black"
android:ellipsize="end"
android:id="@id/TextViewMood"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2.0px"
android:layout_marginRight="2.0px"
android:maxLines="2"
android:layout_weight="1.0"
/>
<TextView
android:textSize="12.0px"
android:id="@id/TextViewTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2.0px"
android:layout_marginTop="2.0px"
style="@style/unnoticeableTextStyle"
/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:gravity="center"
android:orientation="horizontal"
android:id="@id/LinearLayoutTabNav"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:gravity="center"
android:id="@id/TextViewTabMood"
android:layout_width="wrap_content"
android:layout_height="36.0dip"
android:text="心情"
android:layout_weight="1.0"
style="@style/tabTextStyle" />
<TextView
android:gravity="center"
android:id="@id/TextViewTabBlog"
android:layout_width="wrap_content"
android:layout_height="36.0dip"
android:text="日志"
android:layout_weight="1.0"
style="@style/tabTextStyle" />
<TextView
android:gravity="center"
android:id="@id/TextViewTabAlbum"
android:layout_width="wrap_content"
android:layout_height="36.0dip"
android:text="相册"
android:layout_weight="1.0"
style="@style/tabTextStyle" />
<TextView
android:gravity="center"
android:id="@id/TextViewMessage"
android:layout_width="wrap_content"
android:layout_height="36.0dip"
android:text="留言板"
android:layout_weight="1.0"
style="@style/tabTextStyle" />
</LinearLayout>
</LinearLayout>
数据交换
采用对象序列化,那么提供api的服务端也是用java写的了。
代码组织
搞了很多封装,写了N多个组件,不过看起来还清晰。
命名规则
不知道tencent有没有公司内部的规范文档,但我看到
zhuye1.png
zhuye2.png
zhuye3.png
android:id=”@id/ImageView01″
android:id=”@id/ImageView02″
之类的,感到很失望,浪费我时间来翻尸体。
国际化
在layout xml文件还出现
android:text=”上传”,android:text=”取消” android:text=”请输入验证码” 之类的东西,为什么不用@string/xxx 呢?
res/values/strings.xml 里写了很多中文,已经有了values-zh目录,为什么不写到里面呢?
If you enjoyed this post, make sure you subscribe to my RSS feed!
3 replies on “小探 android版QQ空间(体验版)”
看来是一个Android开发高手,企业邮箱邀请码发你了,回头看能不能帮我博客做个Android app。
高手谈不上啦~~ 有时间感兴趣的话,可以练练手。
people are stupid