11.webview、shareSDK
布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/title_red_bg" >
<ImageButton
android:id="@+id/btn_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:background="@null"
android:src="@drawable/back" />
<ImageButton
android:id="@+id/btn_share"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="5dp"
android:background="@null"
android:src="@drawable/icon_share" />
<ImageButton
android:id="@+id/btn_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginRight="5dp"
android:layout_toLeftOf="@id/btn_share"
android:background="@null"
android:src="@drawable/icon_textsize" />
</RelativeLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >
<WebView
android:id="@+id/wv_web"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ProgressBar
android:id="@+id/pb_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:indeterminateDrawable="@drawable/custom_progress" />
</FrameLayout>
</LinearLayout>
2.新闻详情页
public class NewsDetailActivity extends Activity implements OnClickListener {
private WebView mWebView;
private ImageButton btnBack;//后退按钮
private ImageButton btnSize;//设置网页文本大小
private ImageButton btnShare;//分享
private ProgressBar pbProgress;//一进去没加载出内容的进度圈
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_news_detail);
mWebView = (WebView) findViewById(R.id.wv_web);
btnBack = (ImageButton) findViewById(R.id.btn_back);
btnSize = (ImageButton) findViewById(R.id.btn_size);
btnShare = (ImageButton) findViewById(R.id.btn_share);
btnBack.setOnClickListener(this);
btnSize.setOnClickListener(this);
btnShare.setOnClickListener(this);
pbProgress = (ProgressBar) findViewById(R.id.pb_progress);
String url = getIntent().getStringExtra("url");
WebSettings settings = mWebView.getSettings();//获取设置对象
settings.setJavaScriptEnabled(true);// 表示支持js,即网页的阅读全文
settings.setBuiltInZoomControls(true);// 显示放大缩小按钮
settings.setUseWideViewPort(true);// 支持双击缩放
mWebView.setWebViewClient(new WebViewClient() {
/**
* 网页开始加载
*/
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
System.out.println("网页开始加载");
pbProgress.setVisibility(View.VISIBLE);
}
/**
* 网页加载结束
*/
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
System.out.println("网页开始结束");
pbProgress.setVisibility(View.GONE);
}
/**
* 所有跳转的链接都会在此方法中回调
*/
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// tel:110,在这里可以获取连接,可以做很多操作,比如获取了110,我们可以打电话,获取的URL和我们黄网数据库匹配了,可以拦截等
System.out.println("跳转url:" + url);
view.loadUrl(url);//自己的应用中打开网页,不会调到系统浏览器了
return true;
// return super.shouldOverrideUrlLoading(view, url);
}
});
// mWebView.goBack()//比如弄个上一页下一页的按钮执行这个方法
mWebView.setWebChromeClient(new WebChromeClient() {
/**
* 进度发生变化
*/
@Override
public void onProgressChanged(WebView view, int newProgress) {
System.out.println("加载进度:" + newProgress);
super.onProgressChanged(view, newProgress);
}
/**
* 获取网页标题
*/
@Override
public void onReceivedTitle(WebView view, String title) {
System.out.println("网页标题:" + title);//可以显示在顶部的textview上
super.onReceivedTitle(view, title);
}
});
mWebView.loadUrl(url);// 默认加载网页,可以随便写
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_back:
finish();//销毁activity,即显示出了上一个页面
break;
case R.id.btn_size:
showChooseDialog();
break;
case R.id.btn_share:
showShare();
break;
default:
break;
}
}
private int mCurrentChooseItem;// 记录当前选中的item, 点击确定前
private int mCurrentItem = 2;// 记录当前选中的item, 点击确定后,默认是标准字体,有个问题:在进来又变回了标准,可以保存起来
/**
* 显示选择对话框
*/
private void showChooseDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
String[] items = new String[] { "超大号字体", "大号字体", "正常字体", "小号字体",
"超小号字体" };
builder.setTitle("字体设置");
builder.setSingleChoiceItems(items, mCurrentItem,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
System.out.println("选中:" + which);
mCurrentChooseItem = which;
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
WebSettings settings = mWebView.getSettings();
switch (mCurrentChooseItem) {
case 0:
settings.setTextSize(TextSize.LARGEST);
break;
case 1:
settings.setTextSize(TextSize.LARGER);
break;
case 2:
settings.setTextSize(TextSize.NORMAL);
break;
case 3:
settings.setTextSize(TextSize.SMALLER);
break;
case 4:
settings.setTextSize(TextSize.SMALLEST);
break;
default:
break;
}
mCurrentItem = mCurrentChooseItem;
}
});
builder.setNegativeButton("取消", null);
builder.show();
}
/**
* 分享, 注意在sdcard根目录放test.jpg,就是这个天气图片
*/
private void showShare() {
ShareSDK.initSDK(this);
OnekeyShare oks = new OnekeyShare();
oks.setTheme(OnekeyShareTheme.SKYBLUE);//设置天蓝色的主题
// 关闭sso授权
oks.disableSSOWhenAuthorize();
// 分享时Notification的图标和文字,不知道为什么这报错,还是不能写字
oks.setNotification(R.drawable.ic_launcher,
getString(R.string.app_name));
// title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
oks.setTitle(getString(R.string.share));
// titleUrl是标题的网络链接,仅在人人网和QQ空间使用
oks.setTitleUrl("http://sharesdk.cn");
// text是分享文本,所有平台都需要这个字段
oks.setText("我是分享文本");
// imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
oks.setImagePath("/sdcard/test.jpg");// 确保SDcard下面存在此张图片
// url仅在微信(包括好友和朋友圈)中使用
oks.setUrl("http://sharesdk.cn");
// comment是我对这条分享的评论,仅在人人网和QQ空间使用
oks.setComment("我是测试评论文本");
// site是分享此内容的网站名称,仅在QQ空间使用
oks.setSite(getString(R.string.app_name));
// siteUrl是分享此内容的网站地址,仅在QQ空间使用
oks.setSiteUrl("http://sharesdk.cn");
// 启动分享GUI
oks.show(this);
}
}
- 导入的时候遇到了错误,我把工作空间改了成utf-8,但是有一个文件还是报错,于是把例子程序的这个文件拷进来就好了。后来发现运行的程序里的文字是乱码,后来找到了原因,因为我的工作空间默认是GBK,没有修改,所以改成utf-8不识别了。而人家的sdk却是u8。可以单击报错的文件单个修改。以后建工作空间的时候首先要改编码
- 审核一般是2-3天或者一个礼拜
<ShareSDK
AppKey = "62aa650a6c53"/> <!-- 修改成你在sharesdk后台注册的应用的appkey"-->
<!-- ShareByAppClient标识是否使用微博客户端分享,默认是false -->
<SinaWeibo
Id="1"
SortId="1"
AppKey="568898243"//每个应用都需要审核这个APIkey,能写来自。。。。
AppSecret="38a4f8204cc784f81f9f0daaf31e02e3"
RedirectUrl="http://www.sharesdk.cn"
ShareByAppClient="false"
Enable="true" />