ID3V2 中 APIC 帧标识 专辑封面。前几天 百度 谷歌 都没有找到具体的说明。有点小伤人。
最好参考 Android 中的 id3.cpp 以及一个java 开源 id3 库。找到这里的规格了。记录一下分享给需要的童鞋
数据帧头(固定 10个字节)
标签名 4 个字节 APIC
数据帧长度 4 个字节 XX XX XX XX
Flag标签 2 个字节
帧数据
描述信息的编码格式 1 个字节
MIME Type (可变字节)ANSIC 字符串 strlen 计算长度就可以了。(image/jpg)
图片类型 1 个字节
数据描述段 下面专门写
数据描述段
如果 描述信息的编码格式 0x00 好吧,这里的长度你可以用 strlen 来计算了
如果 描述信息的编码格式 0x01 好吧,按照 UNICODE 进行计算(这里之计算长度,每次加2 知道 遇见2个0 就OK了)
参考 Android 的代码实现:
static size_t StringSize(const uint8_t *start, uint8_t encoding) {
if (encoding == 0x00 || encoding == 0x03) {
// ISO 8859-1 or UTF-8
return strlen((const char *)start) + 1;
}
// UCS-2
size_t n = 0;
while (start[n] != '\0' || start[n + 1] != '\0') {
n += 2;
}
return n;
}
给一段实际数据:
-------------- 帧头区 ---------------
第一个红框 APIC
第二个绿框 数据长度
第三个红框 00 00 标识
------------------ 数据区-----------------
第一个蓝框 01 标识描述字段是 unicode
一串ANSIC 字符 image/jpeg 描述 MIME
第二个蓝框 03 标识 图片类型
FF FE 65 00 00 00 // 描述字段 (FF FE 标识大小端, 最后两个00 00 标识 Unicode 描述信息结束 )ANSIC 不列举了
FF D8 ........ 实际封面图片数据, JPEG 图片 一定是 FF D8 开始哦!
小结一下:
描述信息的编码 1个字节
MIME 字符串 N 个字节 strlen 计算
IMAGE 类型 1个字节
描述信息
实际图片数据
仿新浪微博客户端--界面设计(1)
2013年9月16日 新浪微博客户端继续开发
其实这些页面已经做好很久了,因为一直有其他事情要做,所以没太多时间发博客。关于新浪微博客户端的界面我想玩过微博的人都比较熟悉了,新版的客户端界面也发生了很大的变化,我这里也无法做到面面俱到,只能参考着来做咯。事先说明,一本人不太会美工,二这个项目只能当作参考,也是作为小巫学习的一个途径。各位有啥问题,自己想法子解决哈。
先来尝尝鲜吧:
以上五个界面就是主界面的效果图啦,布局其实并不复杂就是有点繁琐罢了,一般由三部分组成,顶部是标题栏,中间是显示列表或内容部分,底部是tabbar栏。
下面一个一个界面来说:
首先介绍底部的tabbar吧
/Wwj_sina_weibo/res/layout/tabbar.xml
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/msg_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone" >
</FrameLayout>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="0.0dip"
android:layout_weight="1.0" />
<!-- TabHost必须要有 TabWidget 否则要报错,我们这里设置它不可见 -->
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.0"
android:visibility="gone" />
<!-- 底部按钮 -->
<RadioGroup
android:id="@+id/main_radio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:background="@drawable/tabbar_background">
<RadioButton
android:id="@+id/tabbar_home"
android:layout_marginTop="2.0dip"
android:drawableTop="@drawable/tabbar_home_selector"
android:tag="tabbar_home"
android:text="@string/home" />
<RadioButton
android:id="@+id/tabbar_message"
android:layout_marginTop="2.0dip"
android:drawableTop="@drawable/tabbar_message_selector"
android:tag="tabbar_message"
android:text="@string/message" />
<RadioButton
android:id="@+id/tabbar_me"
android:layout_marginTop="2.0dip"
android:drawableTop="@drawable/tabbar_selfinfo_selector"
android:tag="tabbar_me"
android:text="@string/me" />
<RadioButton
android:id="@+id/tabbar_discove"
android:layout_marginTop="2.0dip"
android:drawableTop="@drawable/tabbar_discove_selector"
android:tag="tabbar_discove"
android:text="@string/discove" />
<RadioButton
android:id="@+id/tabbar_more"
android:layout_marginTop="2.0dip"
android:drawableTop="@drawable/tabbar_more_selector"
android:tag="tabbar_more"
android:text="@string/more" />
</RadioGroup>
</LinearLayout>
</TabHost>
这里要说明一下,好像自Android3.0后,为了适应大屏幕的出现,增加了Fragment这个组件,是依赖与Activity的,一个Activity可以有多个Fragment,这样可以实现多交互效果。现在TabActivity都被抛弃了,高版本的SDK基本上不用了,只有低版本的SDK才会用,现在基本上用Fragments来代替这个类。在这里我也不用Fragments来代替它了,反正高版本的会兼容低版本的。
/Wwj_sina_weibo/res/layout/home.xml
微博列表界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_home_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- 标题头 -->
<include
android:id="@+id/freelook_title_home"
layout="@layout/home_title" />
<!-- 自定义的圆形进度条 -->
<include
android:id="@+id/loginprogres"
layout="@layout/progress" />
<!-- 自定义刷新列表,下拉刷新 -->
<com.wwj.sina.weibo.view.PullToRefreshListView
android:id="@+id/weibolist"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fastScrollEnabled="true" />
</LinearLayout>
/Wwj_sina_weibo/res/layout/home_title.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/home_title_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/titlebar_bg_nor" >
<Button
android:id="@+id/btn_home_post_weibo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left|center_vertical"
android:layout_marginLeft="5.0dip"
android:background="@drawable/widget_edit_icon" />
<TextView
android:id="@+id/tv_home_name"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/xiaowu"
android:textColor="@color/title_text_color"
android:textSize="@dimen/title_text_size"/>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical">
<ProgressBar
android:id="@+id/progressbar_home_reload"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="gone"
/>
<Button
android:id="@+id/btn_home_reload"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/title_reload"
/>
</FrameLayout>
</FrameLayout>
/Wwj_sina_weibo/res/layout/progress.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/show_progress_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/white"
android:gravity="center"
android:orientation="horizontal"
android:visibility="gone" >
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="30dip"
android:layout_height="30dip"
android:indeterminateDrawable="@drawable/progressbar" />
<TextView
android:id="@+id/progress_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/loadinfo"
android:textColor="@color/black" />
</LinearLayout>
/Wwj_sina_weibo/res/layout/message.xml
消息界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_home_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/titlebar_bg_nor">
<!-- 标题头 -->
<include
android:id="@+id/freelook_home_message"
layout="@layout/message_title" />
<ListView
android:id="@+id/msglist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:cacheColorHint="#00000000"
android:divider="#FCCC"
android:dividerHeight="1.0dip"
>
</ListView>
</LinearLayout>
这里是为了方便以后的扩展,添加了一个ListView来消息列表。
/Wwj_sina_weibo/res/layout/message_title.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/home_title_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/titlebar_bg_nor" >
<TextView
android:id="@+id/tv_msg_name"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/message"
android:textColor="@color/title_text_color"
android:textSize="@dimen/title_text_size" />
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical" >
<Button
android:id="@+id/btnWritePrivateMsg"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_marginRight="10dip"
android:background="@drawable/ic_btn_send"
android:text="@string/message_box_write_msg"
android:textSize="12sp" />
</FrameLayout>
</FrameLayout>
/Wwj_sina_weibo/res/layout/selfinfo.xml
个人资料界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<!-- 头布局 -->
<include
android:id="@+id/freelook_title_selfinfo"
android:layout_height="match_parent"
layout="@layout/selfinfo_title" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<!-- 用户头像及用户名布局 -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp" >
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="115dp"
android:layout_marginBottom="1dp"
android:layout_marginLeft="20dp"
android:layout_marginTop="5dp" >
<ImageView
android:id="@+id/user_portrait"
android:layout_width="114dp"
android:layout_height="114dp"
android:layout_margin="3dp"
android:contentDescription="@string/empty"
android:scaleType="centerInside"
android:src="/blog_article/@drawable/portrait/index.html" />
<ImageView
android:layout_width="114dp"
android:layout_height="wrap_content"
android:layout_margin="3dp"
android:contentDescription="@string/empty"
android:scaleType="centerInside"
android:src="/blog_article/@drawable/portrait_round/index.html" />
</FrameLayout>
<Button
android:id="@+id/btnEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginRight="20dp"
android:background="@drawable/attend_do"
android:text="@string/edit" />
</RelativeLayout>
<!-- 用户地址和登录布局 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:gravity="center_horizontal"
android:orientation="vertical" >
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="1dp" >
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@null"
android:contentDescription="@string/empty"
android:src="/blog_article/@drawable/list_above_nor/index.html" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp" >
<TextView
android:id="@+id/tv_address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="10dp"
android:text="@string/address"
android:textColor="#ff333333"
android:textSize="22sp" />
<TextView
android:id="@+id/tv_userAddress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/tv_address"
android:text="@string/userAddress"
android:textColor="#ff333333"
android:textSize="22sp" />
</RelativeLayout>
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="1dp" >
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@null"
android:contentDescription="@string/empty"
android:src="/blog_article/@drawable/list_above_nor/index.html" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp" >
<TextView
android:id="@+id/loginnum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="10dp"
android:paddingTop="5dp"
android:text="@string/loginNum"
android:textColor="#ff333333"
android:textSize="22sp" />
<TextView
android:id="@+id/tv_loginNum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@+id/loginnum"
android:text="@string/loginNum2"
android:textColor="#ff333333"
android:textSize="22sp" />
</RelativeLayout>
</FrameLayout>
</LinearLayout>
<!-- 微博话题 粉丝条数布局 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal" >
<!-- 关注 -->
<FrameLayout
android:id="@+id/fl_attend"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@null"
android:contentDescription="@string/empty"
android:src="/blog_article/@drawable/bg_panel_above_left/index.html" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/user_attention_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="2dp"
android:text="@string/zero"
android:textColor="@color/blue"
android:textSize="20sp" >
</TextView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="@string/attention"
android:textColor="#ff333333"
android:textSize="20sp" >
</TextView>
</LinearLayout>
</FrameLayout>
<!-- 微博 -->
<FrameLayout
android:id="@+id/fl_twitter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/fl_attend" >
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@null"
android:contentDescription="@string/empty"
android:src="/blog_article/@drawable/bg_panel_above_right/index.html" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/user_weibo_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="2dp"
android:text="@string/zero"
android:textColor="@color/blue"
android:textSize="20sp" >
</TextView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="@string/weibo"
android:textColor="#ff333333"
android:textSize="20sp" >
</TextView>
</LinearLayout>
</FrameLayout>
<!-- 粉丝 -->
<FrameLayout
android:id="@+id/fl_fans"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/fl_attend" >
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@null"
android:contentDescription="@string/empty"
android:src="/blog_article/@drawable/bg_panel_below_right/index.html" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/user_fans_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="2dp"
android:text="@string/zero"
android:textColor="@color/blue"
android:textSize="20sp" >
</TextView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="@string/fans"
android:textColor="#ff333333"
android:textSize="20sp" >
</TextView>
</LinearLayout>
</FrameLayout>
<!-- 话题 -->
<FrameLayout
android:id="@+id/fl_topic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/fl_twitter"
android:layout_toRightOf="@+id/fl_fans" >
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@null"
android:contentDescription="@string/empty"
android:src="/blog_article/@drawable/bg_panel_below_right/index.html" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/user_topic_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="2dp"
android:text="@string/zero"
android:textColor="@color/blue"
android:textSize="20sp" >
</TextView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="@string/topic"
android:textColor="#ff333333"
android:textSize="20sp" >
</TextView>
</LinearLayout>
</FrameLayout>
</RelativeLayout>
</LinearLayout>
<!-- 底部收藏和黑名单 -->
<LinearLayout
android:id="@+id/Userfavlin"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:gravity="center_horizontal"
android:orientation="vertical" >
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="1dp"
android:gravity="center_horizontal" >
<ImageButton
android:id="@+id/user_fav_bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@null"
android:contentDescription="@string/empty"
android:src="/blog_article/@drawable/circle_list_top/index.html" />
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:orientation="horizontal" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="15dp"
android:contentDescription="@string/empty"
android:src="/blog_article/@drawable/triangle/index.html" />
<TextView
android:id="@+id/user_collect_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="20dp"
android:layout_toRightOf="@+id/textView1"
android:text="@string/zero"
android:textColor="@color/blue"
android:textSize="22sp" >
</TextView>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="10dp"
android:text="@string/favorites"
android:textColor="#ff333333"
android:textSize="22sp" />
</RelativeLayout>
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal" >
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@null"
android:contentDescription="@string/empty"
android:src="/blog_article/@drawable/circle_list_bottom/index.html" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/user_blacklist_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="22dp"
android:layout_toRightOf="@+id/tv_blacklist"
android:text="@string/zero"
android:textColor="@color/blue"
android:textSize="22sp" >
</TextView>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="15dp"
android:contentDescription="@string/empty"
android:src="/blog_article/@drawable/triangle/index.html" />
<TextView
android:id="@+id/tv_blacklist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="10dp"
android:text="@string/blacklist"
android:textColor="#ff333333"
android:textSize="22sp" />
</RelativeLayout>
</FrameLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
/Wwj_sina_weibo/res/layout/searchinfo.xml
发现界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/search_title_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/titlebar_bg_nor"
android:orientation="vertical" >
<include
android:id="@+id/title"
layout="@layout/search_title" />
<include
android:id="@+id/search"
layout="@layout/searchpre" />
<ListView
android:id="@+id/searchweibolist"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="#00000000"
android:divider="#FCC"
android:dividerHeight="1.0dip"
android:listSelector="#00000000" >
</ListView>
</LinearLayout>
/Wwj_sina_weibo/res/layout/search_title.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/search_title_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/titlebar_bg_nor" >
<TextView
android:id="@+id/tv_search_name"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/xiaowu"
android:textColor="@color/title_text_color"
android:textSize="@dimen/title_text_size" />
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
>
<ProgressBar
android:id="@+id/titleprogressBar"
android:layout_width="30dip"
android:layout_height="30dip"
android:indeterminateDrawable="@drawable/progressbar"
android:visibility="gone" />
<ImageView
android:id="@+id/title_bt_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/empty"/>
</FrameLayout>
</FrameLayout>
/Wwj_sina_weibo/res/layout/searchpre.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/search_title_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="horizontal"
android:paddingLeft="5.0dip"
android:paddingRight="5.0dip" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<AutoCompleteTextView
android:id="@+id/AutoCompleteTextView01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:completionThreshold="1"
android:hint="@string/soso"
android:paddingLeft="25dp"
android:singleLine="true" />
<Button
android:id="@+id/btnSearch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="@drawable/search_button_bg" >
</Button>
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical"
android:paddingLeft="5dp"
android:paddingRight="5dp" >
<RadioGroup
android:id="@+id/main_radio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="center"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/rbSearchWeibo"
android:checked="true"
android:drawableLeft="@drawable/search_radio_1"
android:tag="radio_button0"
android:text="@string/search_weibo"
android:textSize="17.0sp" />
<RadioButton
android:id="@+id/rbSearchUser"
android:drawableLeft="@drawable/search_radio_2"
android:tag="radio_button1"
android:text="@string/search_user"
android:textSize="17.0sp" />
</RadioGroup>
</LinearLayout>
</LinearLayout>
更多界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/more_title_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:weightSum="1.0" >
<include
android:id="@+id/title"
layout="@layout/more_title" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fadingEdge="none" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="vertical"
android:paddingBottom="10.0dip"
android:paddingLeft="10.0dip"
android:paddingRight="10.0dip"
android:paddingTop="10.0dip" >
<TableLayout
android:id="@+id/MorePageTableLayout_Favorite"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:shrinkColumns="0"
android:stretchColumns="0" >
<TableRow
android:id="@+id/more_page_row0"
android:layout_width="match_parent"
android:layout_marginLeft="2.0dip"
android:layout_marginRight="2.0dip"
android:background="@drawable/more_item_press"
android:clickable="true"
android:paddingBottom="16.0dip"
android:paddingTop="16.0dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:drawableLeft="@drawable/mylike"
android:drawablePadding="10.0dip"
android:gravity="center_vertical"
android:includeFontPadding="false"
android:paddingLeft="17.0dip"
android:text="@string/myweibo"
android:textColor="#ff333333"
android:textSize="16.0sp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="right"
android:contentDescription="@string/empty"
android:gravity="center_vertical"
android:paddingRight="20.0dip"
android:src="/blog_article/@drawable/ic_arrow/index.html" />
</TableRow>
</TableLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10.0dip"
android:layout_marginTop="10.0dip"
android:gravity="center_vertical"
android:paddingLeft="4.0dip"
android:text="@string/mysetting"
android:textColor="#ff888888"
android:textSize="16.0sp" />
<TableLayout
android:id="@+id/MorePageTableLayout_Follow"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="1.0dip"
android:shrinkColumns="0"
android:stretchColumns="0" >
<TableRow
android:id="@+id/more_page_row1"
android:layout_width="fill_parent"
android:layout_marginLeft="2.0dip"
android:layout_marginRight="2.0dip"
android:background="@drawable/more_itemtop_press"
android:clickable="true"
android:paddingBottom="16.0dip"
android:paddingTop="16.0dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:drawableLeft="@drawable/myfollow"
android:drawablePadding="10.0dip"
android:gravity="center_vertical"
android:includeFontPadding="false"
android:paddingLeft="17.0dip"
android:text="@string/user_manger"
android:textColor="#ff333333"
android:textSize="16.0sp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="right"
android:contentDescription="@string/empty"
android:gravity="center_vertical"
android:paddingRight="20.0dip"
android:src="/blog_article/@drawable/ic_arrow/index.html" />
</TableRow>
<TableRow
android:id="@+id/more_page_row2"
android:layout_width="fill_parent"
android:layout_marginLeft="2.0dip"
android:layout_marginRight="2.0dip"
android:background="@drawable/more_itemmiddle_press"
android:clickable="true"
android:paddingBottom="16.0dip"
android:paddingTop="16.0dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:drawableLeft="@drawable/search_friends"
android:drawablePadding="10.0dip"
android:gravity="center_vertical"
android:includeFontPadding="false"
android:paddingLeft="17.0dip"
android:text="@string/findfrinends"
android:textColor="#ff333333"
android:textSize="16.0sp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="right"
android:contentDescription="@string/empty"
android:gravity="center_vertical"
android:paddingRight="20.0dip"
android:src="/blog_article/@drawable/ic_arrow/index.html" />
</TableRow>
<TableRow
android:id="@+id/more_page_row3"
android:layout_width="fill_parent"
android:layout_marginLeft="2.0dip"
android:layout_marginRight="2.0dip"
android:background="@drawable/more_itembottom_press"
android:paddingBottom="16.0dip"
android:clickable="true"
android:paddingTop="16.0dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:drawableLeft="@drawable/invite_friends"
android:drawablePadding="10.0dip"
android:gravity="center_vertical"
android:includeFontPadding="false"
android:paddingLeft="17.0dip"
android:text="@string/invite_frinends"
android:textColor="#ff333333"
android:textSize="16.0sp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="right"
android:contentDescription="@string/empty"
android:gravity="center_vertical"
android:paddingRight="20.0dip"
android:src="/blog_article/@drawable/ic_arrow/index.html" />
</TableRow>
</TableLayout>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10.0dip"
android:layout_marginTop="10.0dip"
android:gravity="center_vertical"
android:paddingLeft="4.0dip"
android:text="@string/client"
android:textColor="#ff888888"
android:textSize="16.0sp" />
<TableLayout
android:id="@+id/MorePageTableLayout_Client"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="1.0dip"
android:shrinkColumns="0"
android:stretchColumns="0" >
<TableRow
android:id="@+id/more_page_row4"
android:layout_width="fill_parent"
android:layout_marginLeft="2.0dip"
android:layout_marginRight="2.0dip"
android:background="@drawable/more_itemtop_press"
android:clickable="true"
android:paddingBottom="16.0dip"
android:paddingTop="16.0dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:drawableLeft="@drawable/setting_mor"
android:drawablePadding="10.0dip"
android:gravity="center_vertical"
android:includeFontPadding="false"
android:paddingLeft="17.0dip"
android:text="@string/setting"
android:textColor="#ff333333"
android:textSize="16.0sp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="right"
android:contentDescription="@string/empty"
android:gravity="center_vertical"
android:paddingRight="20.0dip"
android:src="/blog_article/@drawable/ic_arrow/index.html" />
</TableRow>
<TableRow
android:id="@+id/more_page_row5"
android:layout_width="match_parent"
android:layout_marginLeft="2.0dip"
android:layout_marginRight="2.0dip"
android:background="@drawable/more_itemmiddle_press"
android:clickable="true"
android:paddingBottom="16.0dip"
android:paddingTop="16.0dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:drawableLeft="@drawable/feed_back"
android:drawablePadding="10.0dip"
android:gravity="center_vertical"
android:includeFontPadding="false"
android:paddingLeft="17.0dip"
android:text="@string/addcomment"
android:textColor="#ff333333"
android:textSize="16.0sp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="right"
android:contentDescription="@string/empty"
android:gravity="center_vertical"
android:paddingRight="20.0dip"
android:src="/blog_article/@drawable/ic_arrow/index.html" />
</TableRow>
<TableRow
android:id="@+id/more_page_row6"
android:layout_width="fill_parent"
android:layout_marginLeft="2.0dip"
android:layout_marginRight="2.0dip"
android:background="@drawable/more_itemmiddle_press"
android:clickable="true"
android:paddingBottom="16.0dip"
android:paddingTop="16.0dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:drawableLeft="@drawable/moreitems_version"
android:drawablePadding="10.0dip"
android:gravity="center_vertical"
android:includeFontPadding="false"
android:paddingLeft="17.0dip"
android:text="@string/checkupdate"
android:textColor="#ff333333"
android:textSize="16.0sp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="right"
android:contentDescription="@string/empty"
android:gravity="center_vertical"
android:paddingRight="20.0dip"
android:src="/blog_article/@drawable/ic_arrow/index.html" />
</TableRow>
<TableRow
android:id="@+id/more_page_row7"
android:layout_width="fill_parent"
android:layout_marginLeft="2.0dip"
android:layout_marginRight="2.0dip"
android:background="@drawable/more_itembottom_press"
android:clickable="true"
android:paddingBottom="16.0dip"
android:paddingTop="16.0dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:drawableLeft="@drawable/about_page_mor"
android:drawablePadding="10.0dip"
android:gravity="center_vertical"
android:includeFontPadding="false"
android:paddingLeft="17.0dip"
android:text="@string/about"
android:textColor="#ff333333"
android:textSize="16.0sp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="right"
android:contentDescription="@string/empty"
android:gravity="center_vertical"
android:paddingRight="20.0dip"
android:src="/blog_article/@drawable/ic_arrow/index.html" />
</TableRow>
</TableLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/more_title_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/titlebar_bg_nor" >
<TextView
android:id="@+id/tv_more_name"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/more"
android:textColor="@color/title_text_color"
android:textSize="@dimen/title_text_size" />
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
>
<ProgressBar
android:id="@+id/titleprogressBar"
android:layout_width="30dip"
android:layout_height="30dip"
android:indeterminateDrawable="@drawable/progressbar"
android:visibility="gone" />
<ImageView
android:id="@+id/title_bt_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/empty"/>
</FrameLayout>
</FrameLayout>
关于主界面的设计就这么些代码了,好像蛮多的,其实完全可以发挥你自己的想象力,把原型做出来。我这里也是为了开发方便,界面不会做太多修改,等之后能获取到微博数据,再考虑美化界面。
本文是自己在实践中,发现的问题。
有时候想让界面更加的人性化,就要实现很多的效果,比如只展开一个group,在点击下个group的同时,关闭之前的group
在一个ExpandableListView,如何实现只展开一个group,方法如下:
效果图:
上图的效果,看上去很好,但是存在一个问题,虽然只展开了一个group,但是在点击下一个group的时候,该group的标题不会置顶,这就造成了一些困惑,为了解决这个问题,用到了下边的方法解决:
重写setOnGroupClickListener方法
首先要有一个sign,可以是int sign,用来记录group展开的状态
运行,看一下效果:
至此,在只打开一个group的同时,标题置顶
最后,补充一下,在group没有child的情况下,不展开group
2楼lxq_xsyu昨天 13:20ExpandableListView和ListView的用法差不多,继承自BaseExpandableListAdapter。上面代码已经很明白了1楼weidi1989昨天 12:29建议把源代码分享一下。