简易浏览器App webview


使用
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);TextView textView = new TextView(this);textView.setText("点击打开我的博客");textView.setGravity(Gravity.CENTER);setContentView(textView);textView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.cnblogs.com/baiqiantao/"));intent.addCategory(Intent.CATEGORY_DEFAULT);intent.addCategory(Intent.CATEGORY_BROWSABLE);intent.putExtra(WebViewActivity.TITLE, "包青天的Android之旅");Toast.makeText(MainActivity.this, "Uri=" + intent.getData(), Toast.LENGTH_LONG).show();Log.i("bqt","TITLE=" + intent.getStringExtra(WebViewActivity.TITLE) + "Uri=" + intent.getData() + "\nScheme=" + intent.getScheme() + "\nType="+ intent.getType() + "\nFlags=" + intent.getFlags() + "\nPackage=" + intent.getPackage() + "\nAction=" + intent.getAction()+ "\nCategory=" + intent.getCategories());//TITLE=包青天的Android之旅//Uri=http://www.cnblogs.com/baiqiantao///Scheme=http//Type=null//Flags=0//Package=null//Action=android.intent.action.VIEW//Category={android.intent.category.DEFAULT,//android.intent.category.BROWSABLE}startActivity(intent);}});}}
代码-浏览器Activity
public class WebViewActivity extends Activity implements OnClickListener {public static final String TITLE = "标题";public static final String JS_INTERFACE = "Android";//JS调用类名private WebView webview;private ProgressBar progress_bar;private TextView tv_back;private TextView tv_title;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_webview);initViews();initWebView();}private void initViews() {progress_bar = (ProgressBar) findViewById(R.id.progress_bar);webview = (WebView) findViewById(R.id.webview);tv_back = (TextView) findViewById(R.id.tv_back);tv_title = (TextView) findViewById(R.id.tv_title);tv_back.setOnClickListener(this);progress_bar.setIndeterminate(true);//自动在最小到最大值之间来回移动,不明确具体的值progress_bar.setVisibility(View.VISIBLE);}@SuppressLint("SetJavaScriptEnabled")private void initWebView() {webview.getSettings().setJavaScriptEnabled(true);//支持javascript。这个属性基本也是必须的,否则网页内容不会自适应手机屏幕webview.setWebViewClient(new MyWebViewClient(progress_bar));//在本WebView中显示网页内容。webview.addJavascriptInterface(new WebAppinterface(this), JS_INTERFACE);// 注册后可以在JS中调用此接口中定义的方法Intent intent = getIntent();if (intent != null) {String title = intent.getStringExtra(TITLE);if (!TextUtils.isEmpty(title)) tv_title.setText(title);String url = intent.getDataString();if (null != url && !"".equals(url)) {//防止空指针异常if (!url.startsWith("http://") && !url.startsWith("https://")) {if (url.startsWith("www.")) webview.loadUrl("http://" + url); //以"www."开头,添加"http://"前缀else webview.loadUrl("http://www.baidu.com.cn/s?wd=" + url);//使用百度搜索} else webview.loadUrl(url);//以"http://"开头,直接加载页面} else Toast.makeText(this, "请先输入网址", 0).show();}}@Override//点击后退按钮不退出Activity,而是让WebView后退一页。也可以通过webview.setOnKeyListener设置public boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK && webview.canGoBack()) {webview.goBack(); //后退,goForward() 前进return true;}return super.onKeyDown(keyCode, event);}@Overrideprotected void onDestroy() {super.onDestroy();if (webview != null) {webview.loadUrl("about:blank");webview.destroy();}}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.tv_back:finish();break;}}}
代码-WebviewClint
public class MyWebViewClient extends WebViewClient {private ProgressBar mProgressBar;public MyWebViewClient(ProgressBar mProgressBar) {super();this.mProgressBar = mProgressBar;}@Override//打开网页时不调用系统浏览器, 而是在本WebView中显示public boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return true;}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {mProgressBar.setVisibility(View.VISIBLE);super.onPageStarted(view, url, favicon);}@Overridepublic void onPageFinished(WebView view, String url) {mProgressBar.setVisibility(View.GONE);super.onPageFinished(view, url);}}
代码-JS调用接口
/*** 在JS中可以调用此类中的方法*/public class WebAppinterface {private Activity mActivity;public WebAppinterface(Activity context) {this.mActivity = context;}public void recharge(int vipType) {Intent intent = new Intent(mActivity, Activity.class);Bundle mBundle = new Bundle();mBundle.putInt("item", vipType - 1);mActivity.startActivity(intent, mBundle);}}
浏览器布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><RelativeLayoutandroid:id="@+id/lk_activity_bar"android:layout_width="match_parent"android:layout_height="48dp"android:background="#ffa726" ><TextViewandroid:id="@+id/tv_back"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_alignParentLeft="true"android:clickable="true"android:drawableLeft="@drawable/left_selector"android:drawablePadding="5dp"android:gravity="center|left"android:paddingLeft="15dp"android:text="返回"android:textColor="#fff"android:textSize="14sp" /><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="活动详情"android:textColor="#fff"android:textSize="18sp" /></RelativeLayout><FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent" ><WebViewandroid:id="@+id/webview"android:layout_width="match_parent"android:layout_height="match_parent" /><ProgressBarandroid:id="@+id/progress_bar"style="?android:attr/progressBarStyle"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:indeterminate="true"android:indeterminateDrawable="@drawable/progressbar_drawable"android:visibility="invisible" /></FrameLayout></LinearLayout>
清单文件
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.bqt.browser"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="17"android:targetSdkVersion="17" /><uses-permission android:name="android.permission.INTERNET" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="浏览器App"android:theme="@android:style/Theme.Holo" ><activityandroid:name=".MainActivity"android:label="主页面" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:name=".WebViewActivity"android:label="包青天的浏览器" ><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><data android:scheme="http" /><data android:scheme="https" /><data android:scheme="about" /><data android:scheme="javascript" /></intent-filter></activity></application></manifest>
简易浏览器App webview的更多相关文章
- 从浏览器或者Webview 中唤醒APP
本文来自网易云社区 作者:刘新奇 移动互联时代,很多互联网服务都会同时具备网站以及移动客户端,很多人认为APP的能帮助建立更稳固的用户关系,于是经常会接到各种从浏览器.webview中唤醒APP的需求 ...
- 第4课 简易浏览器-WebViewer组件的使用方法
做一个手机浏览器,需要哪些组件呢? 一.组件设计 二.组件属性及命名修改 三.逻辑设计 1.导航按钮代码:前进.后退.主页 2.访问网页按钮 1)根据用户在地址栏输入的地址书写,判断书写中是否含有“h ...
- python3用pyqt5开发简易浏览器
http://python.jobbole.com/82715/ 在这篇教程中,我们会用 Python 的 PyQt 框架编写一个简单的 web 浏览器.关于 PyQt ,你可能已经有所耳闻了,它是 ...
- uc浏览器app点评
uc浏览器app我经常用,是我接触的第一款手机浏览器,感觉还不错的,uc浏览器新闻更新速度有点慢,有时候还闪退,以前在搜索栏粘贴文字后,如果想改后面的文字,根本就不行,用uc浏览器下东西速度比较慢,现 ...
- 【转】H5 浏览器和 webview 后退缓存机制
来源:https://juejin.im/entry/588b44a08fd9c544813ed5b3 一.背景 用户点击浏览器工具栏中的后退按钮,或者移动设备上的返回键时,或者JS执行history ...
- 手机 简易浏览器 WebView的基本使用 返回 缓存 进度条
public class MainActivity extends AppCompatActivity { private WebView webView; private String url = ...
- (五十九)iOS网络基础之UIWebView简易浏览器实现
[UIWebView网络浏览器] 通过webView的loadRequest方法可以发送请求显示相应的网站,例如: NSURL *url = [NSURL URLWithString:@"h ...
- 简易安卓APP
简介 现在来分享期末做的安卓大作业--生活百科. 本项目只是单纯的一个大作业,没有考虑实际的需求,所以有设计不合理的地方,请见谅. 这个项目有三大功能(因为是使用了侧边栏所以是可以继续往里面添加功能的 ...
- C# 封装miniblink 使用HTML/CSS/JS来构建.Net 应用程序界面和简易浏览器
MiniBlink的作者是 龙泉寺扫地僧 miniblink是什么? (抄了一下 龙泉寺扫地僧 写的简洁) Miniblink是一个全新的.追求极致小巧的浏览器内核项目,其基于chromium最新 ...
随机推荐
- iOS 网络与多线程--6.下载并保存网络图片
使用二进制数据对象的,从制定网站获取数据的方法,下载网络图片,并转化为二进制数据,然后将二进制数据保存到磁盘 按照注释需要进行阅读以下代码 // Created by JinXin on 15/12/ ...
- JavaWeb学习笔记之JSP(二)
1.1. JSP的指令: 1. 什么是JSP 指令? JSP 指令: JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出, 而只是告诉引擎如何处理JSP页面中的 ...
- 武汉科技大学ACM:1006: 我是老大
Problem Description 今年是2021年,正值武汉科技大学 ACM俱乐部成立10周年.十周年庆祝那天,从ACM俱乐部走出去的各路牛人欢聚一堂,其乐融融.庆祝晚会上,大家纷纷向俱乐部伸出 ...
- 托盘图标、气泡以及任务栏崩溃后的自动添加——Shell_NotifyIcon
托盘图标使用函数 Shell_NotifyIcon 创建.修改和删除,参数主要使用 NOTIFYICONDATA 结构. 任务栏启动时会给所有顶层窗口发送 TaskbarCreated 消息,由于不同 ...
- 单电机板机模型,f22
视频连接 http://v.youku.com/v_show/id_XMTI5MDEzMzIxMg==.html?from=y1.7-1.2 http://v.youku.com/v_show/id_ ...
- hdu2112(HDU Today 简单最短路)
Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD ...
- Mysql删除表名中有特殊字符的表
由于公司业务和应用的调整,之前在Mysql中的很多表都不需要了,故需要对数据库进行整理. 刚开始,我在想:不就删除一些表吗?很好解决,写个简单的脚本就可以了.我先看了数据库中有80000多个表,很 ...
- 求奇数的乘积 AC 杭电
求奇数的乘积 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- ubuntu下wine打开自由们找不到MFC42.DLL重新安装的解决方法
一直在找ubuntu下的X墙工具,看到大部分的都是ssh和tor的,但是tor下载不到,找了很多方法,没有办法,只能用FG了.但是Fg是运行在windows系统下的程序. 只好再安装一遍wine,用终 ...
- 無心插柳的Linux學習者代言人——蔡德明
誰是「蔡德明」恐怕沒有多少人知道,不過提到「鳥哥」這個稱號,在臺灣的Linux社群幾乎是無人不知無人不曉,蔡德明正是鳥哥的本名.鳥哥究竟多有名? 如果你是有意學習Linux的初學者,卻不知如何下手,1 ...