当前位置:K88软件开发文章中心编程语言APP编程Android01 → 文章内容

7.5.1 WebView(网页视图)基本用法

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-12 6:26:54

//调用Activity提供的setContentView将webView显示出来 } //我们需要重写回退按钮的时间,当用户点击回退按钮: //1.webView.canGoBack()判断网页是否能后退,可以则goback() //2.如果不可以连续点击两次退出App,否则弹出提示Toast @Override public void onBackPressed() { if (webView.canGoBack()) { webView.goBack(); } else { if ((System.currentTimeMillis() - exitTime) > 2000) { Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { super.onBackPressed(); } } }}2)布局代码中设置WebView相信大家都见过很多的新闻类App吧或者门户信息类的App,他的结构可能是这样的:左上角一个点击关闭当前Activity的按钮,中间是新闻的title,右面是一个刷新按钮,而在右下角可能有这样一个悬浮的按钮,当我们滑动超过屏幕宽度他就会显示出来,当用户点击后又会回滚到网页的顶部!下面我们来简单的实现下!运行效果图:实现代码:MainActivity.java:public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btn_back; private TextView txt_title; private Button btn_top; private Button btn_refresh; private WebView wView; private long exitTime = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bindViews(); } private void bindViews() { btn_back = (Button) findViewById(R.id.btn_back); txt_title = (TextView) findViewById(R.id.txt_title); btn_top = (Button) findViewById(R.id.btn_top); btn_refresh = (Button) findViewById(R.id.btn_refresh); wView = (WebView) findViewById(R.id.wView); btn_back.setOnClickListener(this); btn_refresh.setOnClickListener(this); btn_top.setOnClickListener(this); wView.loadUrl("http://www.baidu.com"); wView.setWebChromeClient(new WebChromeClient() { //这里设置获取到的网站title @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); txt_title.setText(title); } }); wView.setWebViewClient(new WebViewClient() { //在webview里打开新链接 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_back: finish(); //关闭当前Activity break; case R.id.btn_refresh: wView.reload(); //刷新当前页面 break; case R.id.btn_top: wView.setScrollY(0); //滚动到顶部 break; } } @Override public void onBackPressed() { if (wView.canGoBack()) { wView.goBack(); } else { if ((System.currentTimeMillis() - exitTime) > 2000) { Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { finish(); } } }}问题答疑:相信细心的朋友看到,我们回到一开始加载的页面后,按返回键,按了多次还是没有退出当前的APP,后来还是我们手动去点back键通过调用finish方法才能关闭当前的Activity?这是为什么呢?明明百度一下已经是第一个页面啊?答:其实发生这个的原因是:网址的重定向问题引起的,其实我们在访问百度的时候:尽管我们load的是www.baidu.com,但是百度做了重定向,跳转到了手机版百度一下网页:即实际你的流程是:www.baidu.com -> 手机版百度一下 -> 打开其他的链接!我们看到我们上面shouldOverrideUrlLoading()方法是这样写的:view.loadUrl(url);return true;我们知道用户点击一次回退键,那么webview会调用一次goback方法(),我们把上面三个设做A,B,C三个站点,在C时点回退,C - > B没问题,接着再点 B -> A,这个时候问题就来了尽管B来到了A,但是因为重定向又跳转到了B,如此循环往复...这就是为什么点击回退键并没有推出WebView的原因,解决方法:手速,在webview未加载完网页钱连续双击回退键,手速要够快,哈哈!说笑而已,要解决这个问题,我们只需将shouldOverrideUrlLoading里的东东删掉,然后写上return false;即可!不信是重定向,可以自己修改下URL试试~需求2:WebView滚动事件的监听我们都知道监听滚动事件一般都是设置setOnScrollChangedListener,可惜的是WebView并没有给我们提供这样的方法,但是我们可以重写WebView,覆盖里面的一个方法:protected void onScrollChanged(final int l, final int t, final int oldl,final int oldt){}然后再对外提供一个接口,示例代码如下:MyWebViewDemo.java:/** * Created by Jay on 2015/9/11 0011. */public class MyWebView extends WebView { private OnScrollChangedCallback mOnScrollChangedCallback; public MyWebView(Context context) { super(context); } public MyWebView(Context context, AttributeSet attrs) { super(con

上一页  [1] [2] [3] [4]  下一页


7.5.1 WebView(网页视图)基本用法