Android控件组合应用一
2011-12-09 09:52
399 查看
Android在UI部分为应用程序开发人员提供了极大的便利和灵活性,在此就不一一列举了,本文拟通过一个小例子窥见一斑。
很多用过新浪微博手机客户端Android版本的童鞋想必都对其主界面的效果印象深刻,见下左图:
从图中可以看到,主体的列表框是个很复杂的部分,既要能显示头像、微博内容,又要能在微博内容中显示表情、图片、@某人、URL,这些元素混杂在一起,对于某些平台(你懂的J)的UI开发来讲,简直太难了。但在Android上来开发,确实很容易实现,右图就是本程序的运行结果,重点展现了列表框部分的仿照。当然,所用的图片都是来自于新浪的了。
下面,我们就一起来看一下这个效果的代码实现。
首先,需要定义数据模型,主要的数据抽象是Site、Blog、User,分别代表网站、博文、用户,数据模型如下图所示:
具体成员的含义就不解释了。如果你没用过新浪微博,建议去用一下,或者可以参考http://open.weibo.com/中的开发文档。(其实本文的源码来源于一个聚合了新浪微博和搜狐微博两家网站的Android应用,里面利用了两家网站的开放API实现了一些功能,这里已经把网络通信和业务逻辑全去掉了,原谅我吧)。
这几个类的代码如下:
view plain
package com.wenbin.test.site;
public class User{
private String profileImageUrl="http://tp3.sinaimg.cn/1500460450/50/1289923764/0";
private String screenName="测试";
private boolean verified=false;
public User(){
}
public String getProfileImageUrl(){
return profileImageUrl;
}
public String getScreenName(){
return screenName;
}
public void setProfileImageUrl(String profileImageUrl) {
this.profileImageUrl = profileImageUrl;
}
public void setScreenName(String screenName) {
this.screenName = screenName;
}
public void setVerified(boolean verified) {
this.verified = verified;
}
public boolean isVerified(){
return verified;
}
}
view plain
package com.wenbin.test.site;
import java.util.Date;
public class Blog implements Comparable<Blog>{
private Date createAt=new Date(System.currentTimeMillis());
private Blog retweetedBlog;
private String text="就算把我打的遍体鳞伤也见不得会[泪]?http://blog.csdn.net/caowenbin @移动云_曹文斌 。";
private String smallPic="";
private String source="IE9";
private User user;
private Site site;
public Blog(){
}
public Blog(Site site){
this.site=site;
}
public boolean isHaveRetweetedBlog(){
return retweetedBlog!=null;
}
public Blog getRetweetedBlog(){
return retweetedBlog;
}
public String getText(){
return text;
}
public User getUser(){
return user;
}
public String getSmallPic(){
return smallPic;
}
public void setRetweetedBlog(Blog retweetedBlog) {
this.retweetedBlog = retweetedBlog;
}
public void setText(String text) {
this.text = text;
}
public String getInReplyUserScreenName(){
if (retweetedBlog!=null && retweetedBlog.getUser()!=null)
return retweetedBlog.getUser().getScreenName();
else
return "";
}
public String getInReplyBlogText(){
if (retweetedBlog!=null)
return retweetedBlog.getText();
else
return "";
}
public void setPic(String smallPic){
this.smallPic=smallPic;
}
public void setUser(User user) {
this.user = user;
}
public int compareTo(Blog another) {
int ret=0;
if (this.createAt.before(another.createAt)){
ret=-1;
}
else if (this.createAt.after(another.createAt)){
ret=1;
}
else{
ret=0;
}
return ret;
}
public void setSource(String source) {
this.source = source;
}
public String getSource() {
return source;
}
public void setSite(Site site) {
this.site = site;
}
public Site getSite() {
return site;
}
}
view plain
package com.wenbin.test.site;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
public abstract class Site{
protected Set<Blog> blogs=new TreeSet<Blog>();
protected String name;
protected Map<String,String> faceMap=new HashMap<String,String>();
public Site() {
onConstruct();
}
protected abstract void onConstruct();
public Map<String, String> getFaceMap() {
return faceMap;
}
public Set<Blog> getBlogs(){
return blogs;
}
public long getBlogsCount(){
return blogs.size();
}
public void addBlog(Blog blog){
blogs.add(blog);
}
public void removeBlog(Blog blog){
blogs.remove(blog);
}
public Iterator<Blog> getBlogsIterator(){
return blogs.iterator();
}
public void clearBlogs(){
blogs.clear();
}
public String getName(){
return name;
}
}
view plain
package com.wenbin.test.site;
public class SinaSite extends Site {
protected void onConstruct(){
name="新浪微博";
initFaceMap();
}
private void initFaceMap(){
faceMap.put("[呵呵]", "hehe");
faceMap.put("[嘻嘻]", "xixi");
faceMap.put("[哈哈]", "haha");
faceMap.put("[爱你]", "aini");
faceMap.put("[晕]", "yun");
faceMap.put("[泪]", "lei");
}
}
先熟悉一下这些代码,下次就利用这些数据来制作基本的列表框。
——欢迎转载,转载请注明出处 http://blog.csdn.net/caowenbin ——
很多用过新浪微博手机客户端Android版本的童鞋想必都对其主界面的效果印象深刻,见下左图:
从图中可以看到,主体的列表框是个很复杂的部分,既要能显示头像、微博内容,又要能在微博内容中显示表情、图片、@某人、URL,这些元素混杂在一起,对于某些平台(你懂的J)的UI开发来讲,简直太难了。但在Android上来开发,确实很容易实现,右图就是本程序的运行结果,重点展现了列表框部分的仿照。当然,所用的图片都是来自于新浪的了。
下面,我们就一起来看一下这个效果的代码实现。
首先,需要定义数据模型,主要的数据抽象是Site、Blog、User,分别代表网站、博文、用户,数据模型如下图所示:
具体成员的含义就不解释了。如果你没用过新浪微博,建议去用一下,或者可以参考http://open.weibo.com/中的开发文档。(其实本文的源码来源于一个聚合了新浪微博和搜狐微博两家网站的Android应用,里面利用了两家网站的开放API实现了一些功能,这里已经把网络通信和业务逻辑全去掉了,原谅我吧)。
这几个类的代码如下:
view plain
package com.wenbin.test.site;
public class User{
private String profileImageUrl="http://tp3.sinaimg.cn/1500460450/50/1289923764/0";
private String screenName="测试";
private boolean verified=false;
public User(){
}
public String getProfileImageUrl(){
return profileImageUrl;
}
public String getScreenName(){
return screenName;
}
public void setProfileImageUrl(String profileImageUrl) {
this.profileImageUrl = profileImageUrl;
}
public void setScreenName(String screenName) {
this.screenName = screenName;
}
public void setVerified(boolean verified) {
this.verified = verified;
}
public boolean isVerified(){
return verified;
}
}
view plain
package com.wenbin.test.site;
import java.util.Date;
public class Blog implements Comparable<Blog>{
private Date createAt=new Date(System.currentTimeMillis());
private Blog retweetedBlog;
private String text="就算把我打的遍体鳞伤也见不得会[泪]?http://blog.csdn.net/caowenbin @移动云_曹文斌 。";
private String smallPic="";
private String source="IE9";
private User user;
private Site site;
public Blog(){
}
public Blog(Site site){
this.site=site;
}
public boolean isHaveRetweetedBlog(){
return retweetedBlog!=null;
}
public Blog getRetweetedBlog(){
return retweetedBlog;
}
public String getText(){
return text;
}
public User getUser(){
return user;
}
public String getSmallPic(){
return smallPic;
}
public void setRetweetedBlog(Blog retweetedBlog) {
this.retweetedBlog = retweetedBlog;
}
public void setText(String text) {
this.text = text;
}
public String getInReplyUserScreenName(){
if (retweetedBlog!=null && retweetedBlog.getUser()!=null)
return retweetedBlog.getUser().getScreenName();
else
return "";
}
public String getInReplyBlogText(){
if (retweetedBlog!=null)
return retweetedBlog.getText();
else
return "";
}
public void setPic(String smallPic){
this.smallPic=smallPic;
}
public void setUser(User user) {
this.user = user;
}
public int compareTo(Blog another) {
int ret=0;
if (this.createAt.before(another.createAt)){
ret=-1;
}
else if (this.createAt.after(another.createAt)){
ret=1;
}
else{
ret=0;
}
return ret;
}
public void setSource(String source) {
this.source = source;
}
public String getSource() {
return source;
}
public void setSite(Site site) {
this.site = site;
}
public Site getSite() {
return site;
}
}
view plain
package com.wenbin.test.site;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
public abstract class Site{
protected Set<Blog> blogs=new TreeSet<Blog>();
protected String name;
protected Map<String,String> faceMap=new HashMap<String,String>();
public Site() {
onConstruct();
}
protected abstract void onConstruct();
public Map<String, String> getFaceMap() {
return faceMap;
}
public Set<Blog> getBlogs(){
return blogs;
}
public long getBlogsCount(){
return blogs.size();
}
public void addBlog(Blog blog){
blogs.add(blog);
}
public void removeBlog(Blog blog){
blogs.remove(blog);
}
public Iterator<Blog> getBlogsIterator(){
return blogs.iterator();
}
public void clearBlogs(){
blogs.clear();
}
public String getName(){
return name;
}
}
view plain
package com.wenbin.test.site;
public class SinaSite extends Site {
protected void onConstruct(){
name="新浪微博";
initFaceMap();
}
private void initFaceMap(){
faceMap.put("[呵呵]", "hehe");
faceMap.put("[嘻嘻]", "xixi");
faceMap.put("[哈哈]", "haha");
faceMap.put("[爱你]", "aini");
faceMap.put("[晕]", "yun");
faceMap.put("[泪]", "lei");
}
}
先熟悉一下这些代码,下次就利用这些数据来制作基本的列表框。
——欢迎转载,转载请注明出处 http://blog.csdn.net/caowenbin ——
相关文章推荐
- Android控件组合应用六
- 实例讲解Android应用中自定义组合控件的方法
- Android控件组合应用二
- Android UI控件组合应用之一:建立数据模型
- Android UI控件组合应用之二:按钮布局
- Android控件组合应用一
- Android控件组合应用三
- Android控件组合应用五
- Android控件组合应用三
- Android控件组合应用一
- Android控件组合应用二
- Android控件组合应用四
- Android控件组合应用七(结局,附源码)
- Android控件组合应用六
- Android控件组合应用四
- Android控件组合应用五
- Android控件组合应用一
- Android控件组合应用四
- Android控件组合应用六
- Android控件组合应用五