使用

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView textView = new TextView(this);
        textView.setText("点击打开我的博客");
        textView.setGravity(Gravity.CENTER);
        setContentView(textView);
        textView.setOnClickListener(new OnClickListener() {
            @Override
            public 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;
    @Override
    protected 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);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (webview != null) {
            webview.loadUrl("about:blank");
            webview.destroy();
        }
    }
    @Override
    public 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;
    }
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        mProgressBar.setVisibility(View.VISIBLE);
        super.onPageStarted(view, url, favicon);
    }
    @Override
    public 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" >
    <RelativeLayout
        android:id="@+id/lk_activity_bar"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:background="#ffa726" >
        <TextView
            android: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" />
        <TextView
            android: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>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
        <WebView
            android:id="@+id/webview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        <ProgressBar
            android: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-sdk
        android:minSdkVersion="17"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="浏览器App"
        android:theme="@android:style/Theme.Holo" >
        <activity
            android:name=".MainActivity"
            android:label="主页面" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android: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的更多相关文章

  1. 从浏览器或者Webview 中唤醒APP

    本文来自网易云社区 作者:刘新奇 移动互联时代,很多互联网服务都会同时具备网站以及移动客户端,很多人认为APP的能帮助建立更稳固的用户关系,于是经常会接到各种从浏览器.webview中唤醒APP的需求 ...

  2. 第4课 简易浏览器-WebViewer组件的使用方法

    做一个手机浏览器,需要哪些组件呢? 一.组件设计 二.组件属性及命名修改 三.逻辑设计 1.导航按钮代码:前进.后退.主页 2.访问网页按钮 1)根据用户在地址栏输入的地址书写,判断书写中是否含有“h ...

  3. python3用pyqt5开发简易浏览器

    http://python.jobbole.com/82715/ 在这篇教程中,我们会用 Python 的 PyQt 框架编写一个简单的 web 浏览器.关于 PyQt ,你可能已经有所耳闻了,它是 ...

  4. uc浏览器app点评

    uc浏览器app我经常用,是我接触的第一款手机浏览器,感觉还不错的,uc浏览器新闻更新速度有点慢,有时候还闪退,以前在搜索栏粘贴文字后,如果想改后面的文字,根本就不行,用uc浏览器下东西速度比较慢,现 ...

  5. 【转】H5 浏览器和 webview 后退缓存机制

    来源:https://juejin.im/entry/588b44a08fd9c544813ed5b3 一.背景 用户点击浏览器工具栏中的后退按钮,或者移动设备上的返回键时,或者JS执行history ...

  6. 手机 简易浏览器 WebView的基本使用 返回 缓存 进度条

    public class MainActivity extends AppCompatActivity { private WebView webView; private String url = ...

  7. (五十九)iOS网络基础之UIWebView简易浏览器实现

    [UIWebView网络浏览器] 通过webView的loadRequest方法可以发送请求显示相应的网站,例如: NSURL *url = [NSURL URLWithString:@"h ...

  8. 简易安卓APP

    简介 现在来分享期末做的安卓大作业--生活百科. 本项目只是单纯的一个大作业,没有考虑实际的需求,所以有设计不合理的地方,请见谅. 这个项目有三大功能(因为是使用了侧边栏所以是可以继续往里面添加功能的 ...

  9. C# 封装miniblink 使用HTML/CSS/JS来构建.Net 应用程序界面和简易浏览器

    MiniBlink的作者是 龙泉寺扫地僧 miniblink是什么?   (抄了一下 龙泉寺扫地僧 写的简洁) Miniblink是一个全新的.追求极致小巧的浏览器内核项目,其基于chromium最新 ...

随机推荐

  1. angularjs directive中@ = &使用详解

    这段时间在学习angularjs,对directive指令的绑定策略弄了好久才明白,现在做下笔记方便以后查阅,若有错误欢迎指出. 为了使新的指令作用域能访问当前的作用域的一些属性,通常会使用@.=.& ...

  2. iOS 网络与多线程--4.同步Post方式的网络请求

    通过Post请求方式,同步获取网络数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据 在ViewController.m文件内的viewDidLoad函数添加一下测试代码 - (void) ...

  3. HP SimpleXML

    PHP SimpleXML PHP SimpleXML 处理最普通的 XML 任务,其余的任务则交由其它扩展处理. 什么是 PHP SimpleXML? SimpleXML 是 PHP 5 中的新特性 ...

  4. 【创建型】Abstract Factory模式 & Factory Method模式

    本文主要介绍简单工厂模式与抽象工厂模式.以下如有叙述不当之处,欢迎批评指正,欢迎交流探讨. 一:简单工厂模式 在23种设计模式中,简单工厂模式其实是不在列的,但理解该模式对于抽象工厂模式的思想理解是有 ...

  5. string标准库的使用

    string s; s.empty() 如果 s 为空串,则返回 true,否则返回 false. s.size() 返回 s 中字符的个数 s[n] 返回 s 中位置为 n 的字符,位置从 开始计数 ...

  6. 前端MVC学习笔记(一)——MVC概要与angular概要、模板与数据绑定

    一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.AngularJS是框架而jQuery则是库. 1.2. ...

  7. 如何给网页标题栏上添加图标(favicon.ico)

    favicon.ico详解:     favicon是Favorites Icon的缩写,favicon.ico是指显示在浏览器收藏夹.地址栏和标签标题前面的个性化图标. 设置步骤: 1. 把做好的f ...

  8. 转:C语言申请内存时堆栈大小限制

    一直都有一个疑问,一个进程可以使用多大的内存空间,swap交换空间以及物理内存的大小,ulimit的stack size对进程的内存使用有怎样的限制?今天特亲自动手实验了一次,总结如下: 开辟一片内存 ...

  9. 欧拉计划之Largest palindrome product

    A palindromic number reads the same both ways. The largest palindrome made from the product of two 2 ...

  10. nginx对比haproxy 的反向代理

    -bash-4.1# ip add | grep inet inet 172.17.0.7/16 scope global eth0 inet6 fe80::42:acff:fe11:7/64 sco ...