WebView

package com.yyq.today_news.activity;

import java.io.InputStream;
import java.net.URL;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebView.HitTestResult;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.PopupWindow;
import android.widget.Toast;

import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.controller.UMServiceFactory;
import com.umeng.socialize.controller.UMSocialService;
import com.umeng.socialize.media.UMImage;
import com.umeng.socialize.sso.QZoneSsoHandler;
import com.umeng.socialize.sso.UMQQSsoHandler;
import com.yyq.nowday.bean.Beijing_NewsData;
import com.yyq.nowday.db.DataEdit_Recommend;
import com.yyq.nowday.tools.HttpUtils;
import com.yyq.nowday.tools.LoadImageUtils;
import com.yyq.nowday.view.TouchImageView;
import com.yyq.today_news.R;


public class WebView_Activity extends Activity {

	private WebView webview;
	private Document doc;
	//	private String url;
	private String html;
	private String replaceAll;
	private ImageView iv_right_return;
	private Beijing_NewsData beijing_NewsData;
	private CheckBox collect;
	private DataEdit_Recommend dataEdit_Recommend;
	private ImageButton btn_web_share;
	Handler handler=new Handler(){
		@Override
		public void handleMessage(Message msg) {
			//			webview.loadData(html, "text/html;charset=utf-8", null); //加载截取网页内容并设置编码格式
			setWebView(beijing_NewsData.getTitle(),beijing_NewsData.getPtime(), html);
		}
	};
	private UMSocialService mController;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_webview);
		init();
		initData();
		// 1,快速集成了jar包,修改了menifest文件
		// 2,加入分享代码

		// 首先在您的Activity中添加如下成员变量
		mController = UMServiceFactory.getUMSocialService("com.umeng.share");
		// 设置分享内容
		mController
		.setShareContent("友盟社会化组件(SDK)让移动应用快速整合社交分享功能,"+beijing_NewsData.getUrl());
		// 设置分享图片, 参数2为图片的url地址
		//		 mController.setShareMedia(new UMImage(this,beijing_NewsData.getImgsr()));
		// 设置分享图片,参数2为本地图片的资源引用
		mController.setShareMedia(new UMImage(this, R.drawable.ic_launcher));
		// 设置分享图片,参数2为本地图片的路径(绝对路径)
		// mController.setShareMedia(new UMImage(getActivity(),
		// BitmapFactory.decodeFile("/mnt/sdcard/icon.png")));

		// 设置分享音乐
		// UMusic uMusic = new
		// UMusic("http://sns.whalecloud.com/test_music.mp3");
		// uMusic.setAuthor("GuGu");
		// uMusic.setTitle("天籁之音");
		// 设置音乐缩略图
		// uMusic.setThumb("http://www.umeng.com/images/pic/banner_module_social.png");
		// mController.setShareMedia(uMusic);

		// 设置分享视频
		// UMVideo umVideo = new UMVideo(
		// "http://v.youku.com/v_show/id_XNTE5ODAwMDM2.html?f=19001023");
		// 设置视频缩略图
		// umVideo.setThumb("http://www.umeng.com/images/pic/banner_module_social.png");
		// umVideo.setTitle("友盟社会化分享!");
		// mController.setShareMedia(umVideo);
		addplatform();
		Listeners();
	}
	public void addplatform(){
		//qq
		addqq();
		//qqzone
		addqqzone();
	}
	/**
	 * 监听设置
	 */
	private void Listeners() {
		iv_right_return.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				finish();
			}
		});
		collect.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				if (isChecked) {
					if (dataEdit_Recommend.selectItem(beijing_NewsData.getDocid())!=null) {
						Toast.makeText(WebView_Activity.this, "已经收藏", Toast.LENGTH_SHORT).show();
					}else {
						dataEdit_Recommend.collectData(beijing_NewsData, isChecked);
						Toast.makeText(WebView_Activity.this, "收藏成功", Toast.LENGTH_SHORT).show();
					}
				} else {
					if (dataEdit_Recommend.deleteData(beijing_NewsData.getDocid())) {
						Toast.makeText(WebView_Activity.this, "取消收藏", Toast.LENGTH_SHORT).show();
					}
				}
			}
		});
		btn_web_share.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				mController.getConfig().removePlatform( SHARE_MEDIA.RENREN, SHARE_MEDIA.DOUBAN);
				mController.openShare(WebView_Activity.this, false);
			}
		});
	}
	private void init() {
		webview=(WebView) findViewById(R.id.wv_window);
		btn_web_share=(ImageButton) findViewById(R.id.btn_web_share);
		iv_right_return=(ImageView) findViewById(R.id.iv_right_return);
		collect=(CheckBox) findViewById(R.id.cb_web_collect);
	}
	/**
	 * 接受intent的数据
	 */
	private void initData() {
		Intent intent=getIntent();
		//		url = intent.getStringExtra("url");
		beijing_NewsData = (Beijing_NewsData) intent.getSerializableExtra("beijing_NewsData");
		dataEdit_Recommend = new DataEdit_Recommend(WebView_Activity.this);
		WebSettings set = webview.getSettings();//webview设置编码格式
		set.setDatabasePath("utf-8");
		set.setJavaScriptEnabled(true);
		new Thread() {
			public void run() {
				load(beijing_NewsData.getUrl());//网页加载
			}
		}.start();
		webview.setWebChromeClient(new MychromClient());
		webview.setOnTouchListener(new OnTouchListener() {
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				// TODO Auto-generated method stub
				HitTestResult hitTestResult = ((WebView) v).getHitTestResult();
				if (null == hitTestResult) {
					System.out.println("非图片");
					return false;
				}else{
					if (hitTestResult.getType() == HitTestResult.IMAGE_TYPE) {
						try {
							System.out.println("点击到了图片。。。。。。。。。。。。。");
							showpopup(hitTestResult.getExtra().toString()); //图片URL
						} catch (Exception e) {
							e.printStackTrace();
						}  
					}
					return false;
				}
			}
		});
		WebSettings webSetting = webview.getSettings();
		webSetting.setBuiltInZoomControls(true); // 设置显示缩放按钮
		webSetting.setSupportZoom(true); // 支持缩放
	}
	/**
	 * 截取需要的网页信息
	 */
	protected void load(String url) {
		try {
			doc = Jsoup.parse(new URL(url), 5000);
			Elements e = doc.getElementsByClass("content");
			html = e.html();
			replaceAll = html.replaceAll("<img [^>]*/>", "");
			System.out.println(replaceAll);
			handler.sendEmptyMessage(1);
		} catch (Exception e1) {
			e1.printStackTrace();
		}
	}

	/**
	 * 将信息显示到WebView上
	 */
	private void setWebView(String title,String date,String value) {
		String htmlContent = "";
		try {
			InputStream in = getAssets().open("context.html");
			byte[] tmp = HttpUtils.readInputStream(in);
			htmlContent = new String(tmp);
			//checkParams(); // 最后校验属性,防止异常标签引发的异常
			webview.loadData(htmlContent.replace("@title", title)
					.replace("@pubdate", date)
					.replace("@content", value), "text/html;charset=utf-8",null);
		} catch (Exception e) {
			e.printStackTrace();
		}
	} 

	public void showpopup(String url) throws Exception{

		TouchImageView img = new TouchImageView(this);
		img.setMaxZoom(4f);
		img.setScaleType(ScaleType.FIT_XY);
		LoadImageUtils.loadImageFromNet(url, img);
		final PopupWindow popupWindow = new PopupWindow(img,
				LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, true);

		// popupWindow.setTouchable(false);

		// popupWindow.setOutsideTouchable(false);

		// 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框
		// 我觉得这里是API的一个bug
		ColorDrawable dw = new ColorDrawable(-00000);
		popupWindow.setBackgroundDrawable(dw);
		img.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				popupWindow.dismiss();
			}
		});
		// 设置好参数之后再show
		popupWindow.showAsDropDown(img);

	}

	class MychromClient extends WebChromeClient{
		@Override
		public boolean onJsAlert(WebView view, String url, String message,
				JsResult result) {
			result.cancel();
			AlertDialog.Builder builder=new AlertDialog.Builder(WebView_Activity.this);
			builder.setTitle("提示窗口");
			builder.setMessage(message);
			builder.create().show();
			return true;
		}
		@Override
		public boolean onJsConfirm(WebView view, String url, String message,
				final JsResult result) {
			AlertDialog.Builder dialog = new AlertDialog.Builder(WebView_Activity.this);
			dialog.setIcon(R.drawable.ic_launcher)
			.setTitle("确认提示框")
			.setMessage(message)
			.setPositiveButton("确认", new DialogInterface.OnClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int which) {
					result.confirm();//用户选择了对话框的确认,表示继续向下走代码,把系统的确认框给确认了
				}
			} )
			.setNegativeButton("取消", new DialogInterface.OnClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int which) {
					result.cancel();//用户选择了对话框的取消,表示不再向下走代码,把系统的确认框给取消了
				}
			}).create().show();
			return true;
		}
	}
	/**
	 * 后退键操作设置
	 */
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		if (keyCode==KeyEvent.KEYCODE_BACK&&webview.canGoBack()) {
			webview.goBack();
		}else{
			super.onKeyDown(keyCode, event);
		}
		return true;
	}
	public void addqq(){
		//参数1为当前Activity,参数2为开发者在QQ互联申请的APP ID,参数3为开发者在QQ互联申请的APP kEY.
		UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(this, "100424468",
				"c7394704798a158208a74ab60104f0ba");
		qqSsoHandler.addToSocialSDK();  
	}
	public void addqqzone(){
		//参数1为当前Activity,参数2为开发者在QQ互联申请的APP ID,参数3为开发者在QQ互联申请的APP kEY.
		QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(this, "100424468",
				"c7394704798a158208a74ab60104f0ba");
		qZoneSsoHandler.addToSocialSDK();
	}
}

资源下载链接为: https://pan.quark.cn/s/f989b9092fc5 今天给大家分享一个关于C#自定义字符串替换方法的实例,希望能对大家有所帮助。具体介绍如下: 之前我遇到了一个算法题,题目要求将一个字符串中的某些片段替换为指定的新字符串片段。例如,对于源字符串“abcdeabcdfbcdefg”,需要将其中的“cde”替换为“12345”,最终得到的结果字符串是“ab12345abcdfb12345fg”,即从“abcdeabcdfbcdefg”变为“ab12345abcdfb12345fg”。 经过分析,我发现不能直接使用C#自带的string.Replace方法来实现这个功能。于是,我决定自定义一个方法来完成这个任务。这个方法的参数包括:原始字符串originalString、需要被替换的字符串片段strToBeReplaced以及用于替换的新字符串片段newString。 在实现过程中,我首先遍历原始字符串,查找需要被替换的字符串片段strToBeReplaced出现的位置。找到后,就将其替换为新字符串片段newString。需要注意的是,在替换过程中,要确保替换操作不会影响后续的查找和替换,避免遗漏或重复替换的情况发生。 以下是实现代码的大概逻辑: 初始化一个空的字符串result,用于存储最终替换后的结果。 使用IndexOf方法在原始字符串中查找strToBeReplaced的位置。 如果找到了,就将originalString中从开头到strToBeReplaced出现位置之前的部分,以及newString拼接到result中,然后将originalString的查找范围更新为strToBeReplaced之后的部分。 如果没有找到,就直接将剩余的originalString拼接到result中。 重复上述步骤,直到originalStr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值