Android中WebView加载网页设置进度条

我们平时在进行安卓开发使用到webview加载网页时,我们不能准确了解网页的加载进度,因此为了提高用户体验,我们在webview中加入进度条显示加载进度。

 

一、主界面xml布局文件

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

<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"

  tools:context=".MainActivity"

  android:orientation="vertical"

  >

  <RelativeLayout

  android:layout_width="match_parent"

  android:layout_height="40dp"

  android:background="#1B9A16"

      

    />

      

  

  <ProgressBar

    android:id="@+id/progressBar1"

    style="?android:attr/progressBarStyleHorizontal"

    android:layout_width="match_parent"

    android:layout_height="3dip"

    android:progressDrawable="@drawable/pg"

    android:visibility="gone"

    

    />

  

  <WebView

    android:id="@+id/webview1"

    android:layout_below="@id/progressBar1"

    android:layout_width="match_parent"

    android:layout_height="match_parent" />

  

</LinearLayout>

二、ProgressBar样式布局文件(pg.xml放在drawable下面)

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

  

  <item android:id="@android:id/background">

    <shape>

      <corners android:radius="2dp" />

      <gradient

        android:angle="270"

        android:centerColor="#E3E3E3"

        android:endColor="#E6E6E6"

        android:startColor="#C8C8C8" />

    </shape>

  </item>

  <item android:id="@android:id/progress">

    <clip>

      <shape>

        <corners android:radius="2dp" />

        <gradient

          android:centerColor="#4AEA2F"

          android:endColor="#31CE15"

          android:startColor="#5FEC46" />

          

      </shape>

    </clip>

  </item>

  

</layer-list>

三、逻辑代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

package com.example.webview;

  

import android.os.Bundle;

import android.app.Activity;

import android.transition.Visibility;

import android.view.KeyEvent;

import android.view.Menu;

import android.view.View;

import android.view.Window;

import android.webkit.WebChromeClient;

import android.webkit.WebSettings;

import android.webkit.WebView;

import android.webkit.WebViewClient;

import android.widget.ProgressBar;

  

public class MainActivity extends Activity {

    

  private WebView webView;

  private ProgressBar pg1;

  @Override

  protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);

    setContentView(R.layout.activity_main);

    init();

    webView.loadUrl("http://www.baidu.com");

  }

  

  private void init() {

    // TODO 自动生成的方法存根

    webView=(WebView) findViewById(R.id.webview1);

    pg1=(ProgressBar) findViewById(R.id.progressBar1);

      

    webView.setWebViewClient(new WebViewClient(){

      //覆写shouldOverrideUrlLoading实现内部显示网页

      @Override

      public boolean shouldOverrideUrlLoading(WebView view, String url) {

        // TODO 自动生成的方法存根

        view.loadUrl(url);

        return true;

      }

    });

    WebSettings seting=webView.getSettings();

    seting.setJavaScriptEnabled(true);//设置webview支持javascript脚本

    webView.setWebChromeClient(new WebChromeClient(){

      @Override

      public void onProgressChanged(WebView view, int newProgress) {

        // TODO 自动生成的方法存根

          

        if(newProgress==100){

          pg1.setVisibility(View.GONE);//加载完网页进度条消失

        }

        else{

          pg1.setVisibility(View.VISIBLE);//开始加载网页时显示进度条

          pg1.setProgress(newProgress);//设置进度值

        }

          

      }

    });

      

  }

  

    

  //设置返回键动作(防止按返回键直接退出程序)

  @Override

  public boolean onKeyDown(int keyCode, KeyEvent event) {

    // TODO 自动生成的方法存根

    if(keyCode==KeyEvent.KEYCODE_BACK) {

      if(webView.canGoBack()) {//当webview不是处于第一页面时,返回上一个页面

        webView.goBack();

        return true;

      }

      else {//当webview处于第一页面时,直接退出程序

        System.exit(0);

      }

        

      

    }

    return super.onKeyDown(keyCode, event);

  }

    

  

}

整体流程就这样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值