Android开发 实现图文混排功能

第一种,运用WebView. 解析数据,拼接html代码,显示.

Json数据:

[{"detail":"据国外媒体报道,一架“喷气流”飞机首次在英国共享空域成功进行了无人驾驶飞行。这次开拓性飞行在很大程度上是由一名驾驶员在地面上控制的。飞机从兰开夏郡普雷斯顿市附近的沃顿起飞,在因费内斯市着陆。这次飞行被描述为“航空史上的新篇章”,可能为“无人机”操控人员从地面操纵客机铺平道路。"},{"detail":"http://img.cnbeta.com/newsimg/130528/1100390909721537.jpg"},{"detail":"这次开拓性飞行在很大程度上是由一名驾驶员在地面上控制的。飞机从兰开夏郡普雷斯顿市附近的沃顿起飞,然后在因费内斯市着陆。整个过程中,只有起飞和着陆是由机载驾驶员控制的。"},{"detail":"http://img.cnbeta.com/newsimg/130528/11004011483998264.jpg"},{"detail":"飞行期间,相机把活动目标影像传送给地面操控人员。"},{"detail":"http://img.cnbeta.com/newsimg/130528/11004021793061277.jpg"},{"detail":"遥控驾驶员通过相机和一个“电子眼”操纵这架飞机。这架试验机上有两名驾驶员,但他们只负责飞机起飞和着陆。"},{"detail":"http://img.cnbeta.com/newsimg/130528/1100403259238856.jpg"},{"detail":"在长达500英里(约合800公里)的航程中,这架16座飞机飞行在客运公司共享空域,但它上面没有乘客。“与航空评估有关的自主式系统技术”(ASTRAEA)项目负责人兰伯特-多宾-海彭斯塔尔表示:“这项工作有望进入ASTRAEA项目的下一阶段。随着无人驾驶飞机和相关技术的开发,它可能会在接下来5年、10年和20年内影响我们所有人,成为日常生活的一部分。简单地说,我认为我们正在书写航空史的新篇章。”英国国家空运局无人驾驶飞机专家安德鲁-查普曼表示:“国家空运局保证,这次试飞是在没有给共享空域的其他航班构成任何安全威胁的情况进行的。尽管无人驾驶客机领域还需进行更多科研工作,但从这次成功飞行的情况来看,一架无人机可以在不同空域运行。”ASTRAEA项目进行了一系列试飞计划,而从兰开夏郡普雷斯顿市起飞的这次飞行是最近进行的一次。该项目从商业公司和英国政府那里获得6200万英镑资金支持,目的是发展民用无人驾驶飞机。喷气流无人机通过驾驶舱内和飞机下的许多相机把高清晰度画面传送给地面操控人员。机载传感器还捕捉到飞机及其周围大气的关键信息,使地面操控人员准确获得数据。这些数据和他们坐在驾驶舱内得到的数据是一样的。这个无人驾驶系统现在将进行一系列严格的安全系统测试,目的是确保它避开恶劣天气,发现和避开附近飞机,在没有援助情况下进行紧急迫降。在一架遥控客机被用于运送乘客前,飞行规则将被彻底检查。英国商业与能源部部长迈克尔-法伦用“开拓性”描述最近这次飞行。他说:“ASTRAEA项目已取得显著成绩,使英国无人驾驶飞机和无人驾驶民用客机规则的发展在世界上占有重要地位。”ASTRAEA项目得到英国民用航空管理局(CAA)的支持。"}]


数据读取 AnalysisJSON.java

package com.jsk.imgtxt;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class AnalysisJSON {

	public static List<Content> getProvinceCities(String json){
		List<Content> list = new ArrayList<Content>();
		
		try {
			JSONArray jsonArray = new JSONArray(json);
			int count = jsonArray.length();
			for(int i=0; i < count; i++){
				JSONObject object = jsonArray.getJSONObject(i);
				String detail = object.getString("detail");
				boolean img = false;
				if(detail.indexOf(".jpg") != -1){
					img = true;
				}
				Content content = new Content(detail, img);
				
				list.add(content);
			}
			
		} catch (JSONException e) {
			e.printStackTrace();
		} catch (Exception e){
			e.printStackTrace();
		} 
		
		return list;
	}
}


实体类:Content.java

package com.jsk.imgtxt;

import java.io.Serializable;

public class Content implements Serializable {

	
	private static final long serialVersionUID = 1L;
	private String details;
	private boolean img; //用于判断是否是图片地址
	
	public Content(String details, boolean img){
		this.details = details;
		this.img = img;
	}
	
	public String getDetails() {
		return details;
	}
	
	public void setDetails(String details) {
		this.details = details;
	}
	
	public boolean isImg() {
		return img;
	}
	
	public void setImg(boolean img) {
		this.img = img;
	}
	
	
	
}


MainActivity.java  主要是

public String setStr(){
    	StringBuffer con = new StringBuffer();
    	for(Content c:list){
    		if(c.isImg()){
    			String str = "<img src=\""+c.getDetails()+"\" >";
    			con.append(str);
    		} else {
    			con.append(c.getDetails());
    		}
    	}
		return con.toString();
    }


 

web_content.loadDataWithBaseURL(null, 
				"<html><font style=\"line-height:1.5em;\" >"+setStr()+"</font></html>",
			     "text/html", "utf-8", null);


 

 

 

 

package com.jsk.imgtxt;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import android.os.Bundle;
import android.view.Window;
import android.webkit.WebSettings.LayoutAlgorithm;
import android.webkit.WebView;
import android.app.Activity;
import android.content.res.AssetManager;

public class MainActivity extends Activity {

    private String path = "json/news.json";
    List<Content> list;
    WebView web_content;
    String json;
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);
        
        web_content = (WebView)findViewById(R.id.web_content);
        web_content.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); 
        
        getAssetsData();
        
        web_content.loadDataWithBaseURL(null, 
				"<html><font style=\"line-height:1.5em;\" >"+setStr()+"</font></html>",
			     "text/html", "utf-8", null);
        
    }
    
    public List<Content> getAssetsData(){
		AssetManager am = this.getAssets();
		try {
			InputStream is = am.open(path);
			ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
			byte[] bt = new byte[1024];
			int len = 0;
			while((len = is.read(bt)) != -1){
				outputStream.write(bt, 0, len);
			}
			
			outputStream.close();
			is.close();
			json = outputStream.toString();
			list = AnalysisJSON.getProvinceCities(json);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return list;
	}
    
    /*设置字符串*/
    public String setStr(){
    	StringBuffer con = new StringBuffer();
    	for(Content c:list){
    		if(c.isImg()){
    			String str = "<img src=\""+c.getDetails()+"\" >";
    			con.append(str);
    		} else {
    			con.append(c.getDetails());
    		}
    	}
		return con.toString();
    }
    
    
}


 

第二种:运用ListView,判断是否为图片,而选择隐藏文本控件,显示图片控件

 

@Override
	public boolean isEnabled(int position) { //屏蔽listView的每个item的高亮效果
		return false;
	}


 

 

ImgTxtAdapter.java

package com.jsk.imgtxt;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

public class ImgTxtAdapter extends BaseAdapter {

	private Context context;
	private LayoutInflater inf;
	private List<Content> list;
	
	public ImgTxtAdapter(Context context, List<Content> list){
		this.context = context;
		this.list = list;
		
		inf = LayoutInflater.from(this.context);
	}
	
	@Override
	public int getCount() {
		return list != null ? list.size() : 0;
	}

	@Override
	public Object getItem(int position) {
		return position;
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

//	@Override
//	public boolean areAllItemsEnabled() {
//		return false;
//	} 

	@Override
	public boolean isEnabled(int position) { //屏蔽listView的每个item的高亮效果
		return false;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		MyView mv;
		if(null == convertView){
			mv = new MyView();
			convertView = inf.inflate(R.layout.img_txt_item, null);
			
			mv.img = (ImageButton)convertView.findViewById(R.id.img);
			mv.txt = (TextView)convertView.findViewById(R.id.txt);
			
			convertView.setTag(mv);
			
		} else {
			mv = (MyView) convertView.getTag();
		}
		
		Content content = list.get(position);
		if(content.isImg()){ //判断是否是图片地址
			mv.img.setBackgroundResource(R.drawable.note_pic_loading);
			mv.txt.setVisibility(View.GONE);
		} else {
			mv.txt.setText(content.getDetails());
			mv.img.setVisibility(View.GONE);
		}
		return convertView;
	}

	class MyView {
		ImageButton img;
		TextView txt;
	}
}


 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值