博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ProgressBar+WebView实现自定义浏览器
阅读量:7080 次
发布时间:2019-06-28

本文共 4526 字,大约阅读时间需要 15 分钟。

当我们使用浏览器浏览网页时,总会看到下图页面的样子,上面是一个地址栏,地址栏下面显示加载进度,加载完成后进入页面内容,带颜色的进度条总是少不了的,那样子看起来也舒服,如何实现自定义手机浏览器功能呢?

上面是360浏览器加载过程的截图,看起来也不算复杂,在做安卓开发中,经常要用到浏览器加载HTML的页面,于是想做一个demo,避免每次重复写的麻烦,效果图如下:
第一步:自定义WebView,命名ProgressWebView,在自定义ProgressWebView中添加进度条效果,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public
ProgressWebView(Context context, AttributeSet attrs) {
        
super
(context, attrs);
        
progressbar =
new
ProgressBar(context,
null
,
                
android.R.attr.progressBarStyleHorizontal);
        
progressbar.setLayoutParams(
new
LayoutParams(LayoutParams.FILL_PARENT,
                
10
,
0
,
0
));
         
        
Drawable drawable = context.getResources().getDrawable(R.drawable.progress_bar_states);
        
progressbar.setProgressDrawable(drawable);
        
addView(progressbar);
        
// setWebViewClient(new WebViewClient(){});
        
setWebChromeClient(
new
WebChromeClient());
        
//是否支持缩放
        
getSettings().setSupportZoom(
true
);
        
getSettings().setBuiltInZoomControls(
true
);
    
}

在这个构造方法里面,自定义进度条属性,设置为水平进度条,进度条的高度,同时定义进度条状态颜色,写在progress_bar_states.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
<layer-list xmlns: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>

在这个xml文件中,可以按照自己喜好设置加载颜色,然后把进度条视图添加到WebView视图中,在使用ProgressWebView加载 HTML网页,可以像360浏览器一样显示加载进度。setWebChromeClient(new WebChromeClient())用于加载请求的网页,支持进度条、js等效果,这里定义一个内部类WebChromeClient,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public
class
WebChromeClient
extends
android.webkit.WebChromeClient {
        
@Override
        
public
void
onProgressChanged(WebView view,
int
newProgress) {
            
if
(newProgress ==
100
) {
                
progressbar.setVisibility(GONE);
            
}
else
{
                
if
(progressbar.getVisibility() == GONE)
                    
progressbar.setVisibility(VISIBLE);
                
progressbar.setProgress(newProgress);
            
}
            
super
.onProgressChanged(view, newProgress);
        
}
 
    
}

这两个getSettings().setSupportZoom(true)和getSettings().setBuiltInZoomControls(true)设置是否支持缩放。

第二步:定义显示类,命名ProgressWebActivity.java,布局文件命名main_web.xml,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=""
    
android:layout_width="fill_parent"
    
android:layout_height="fill_parent"
    
android:orientation="vertical" >
 
    
<include
        
android:id="@+id/head_views_main"
        
layout="@layout/head_re" />
 
    
<com.sinolvc.zspg.view.ProgressWebView
        
android:id="@+id/baseweb_webview"
        
android:layout_width="fill_parent"
        
android:layout_height="fill_parent"
        
android:fadeScrollbars="true"
        
android:scrollbarStyle="insideOverlay" />
 
</LinearLayout>

ProgressWebActivity.java代码:

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
public
class
ProgressWebActivity
extends
BaseActivity {
 
    
protected
ProgressWebView mWebView;
     
    
@Override
    
protected
void
onCreate(Bundle savedInstanceState) {
        
super
.onCreate(savedInstanceState);
        
setContentView(R.layout.activity_baseweb);
 
        
mWebView = (ProgressWebView) findViewById(R.id.baseweb_webview);
        
mWebView.getSettings().setJavaScriptEnabled(
true
);
        
initData();
         
         
        
initTitleView(getWindow().getDecorView(),R.string.load_news_detail_info,ProgressWebActivity .
this
);
        
finishMySelf();
    
}
    
private
void
finishMySelf(){
        
backll.setOnClickListener(
new
OnClickListener() {
 
            
@Override
            
public
void
onClick(View v) {
                
ProgressWebActivity .
this
.finish();
            
}
        
});
    
}
    
protected
void
initData() {
        
Intent intent = getIntent();
        
Bundle bundle = intent.getExtras();
        
String url = bundle.getString(
"url"
);
 
        
if
(!TextUtils.isEmpty(url)&&!TextUtils.isEmpty(title)){
        
mWebView.loadUrl(url);
 
        
}
 
    
}
 
    
@Override
    
protected
void
onDestroy() {
        
// TODO Auto-generated method stub
        
super
.onDestroy();
        
mWebView =
null
;
 
    
}
 
}

initData方法获取上一个Activity传递过来的Intent数据,取出网页URL,判断连接是否为空,如果不为空,则使用自定义的ProgressWebView的loadUrl()方法加载,这个时候我们将会在APP端看到如下效果:

initTitleView用于设置浏览器顶部导航条,显示返回按钮和浏览新闻文字。
第三步:在需要使用自定义浏览器这个类ProgressWebActivity的地方,我们只需要设置Intent的数据,然后启动ProgressWebActivity加载之定义URL,实现带进度条加载指定页面的功能。

1
2
3
4
5
6
7
8
Bundle bundle = new Bundle();
 
        
bundle.putString("url", "");
        
bundle.putString("title", "做最好的源码分享网站");
        
Intent intent = new Intent(getContext(), ProgressWebActivity.class);
        
intent.putExtras(bundle);
 
        
startActivity(intent);

到这里,我们使用ProgressBar+WebView自定义浏览器器的功能基本完成!

转载于:https://www.cnblogs.com/dazhao/p/4943579.html

你可能感兴趣的文章
Java NIO系列教程(五) 通道之间的数据传输
查看>>
open-falcon安装使用监控树莓派
查看>>
【基础篇】零碎时间整理JS
查看>>
理解 Android Battery 信息
查看>>
js红宝书总结-正则表达式
查看>>
Python2.7爬取acg178全站(大雾)
查看>>
iview 使用render渲染InputNumber,并格式化数字
查看>>
使用swoole改造laravel应用
查看>>
微信自动化工具---自动发送朋友圈(非root权限)
查看>>
在kubernetes集群中部署open-falcon
查看>>
手把手教你实现高性能Android树形控件 TreeView
查看>>
vue swiper轮播图不显示 swiper-pagination 小圆点
查看>>
HTML逆向解析生成Markdown
查看>>
架构师都知道的分布式对象存储解决方案
查看>>
[译] 提高编程能力的秘诀
查看>>
Java&Spring系列笔记
查看>>
理解JS中的this
查看>>
一位6年老Android面经总结
查看>>
DDD基础知识1
查看>>
前端WEB-API 第四天-- 操作DOM 与 动态创建 DOM
查看>>