在上一篇博客里面已经实现了webview的网页加载进度条和自定义返回键,如今还有一个经常使用的功能就是H5那边的标题栏有多是须要咱们去写的,那么在展现的时候须要咱们去获取他们的标题而且展现。以前的一些布局在上一篇博客里面http://blog.csdn.net/wtwzd002/article/details/76359291。
这里写的是修改的逻辑和布局。
一、webview所在activity的逻辑java
package com.xdf.education.bpmprojectcode.activity;
import android.app.Instrumentation;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.xdf.education.bpmprojectcode.R;
/** * Created by wds on 2017/7/17. */
public class WebView extends AppCompatActivity implements View.OnClickListener{
private android.webkit.WebView webView=null;
private ProgressBar pg;
private TextView web_title=null;
TextView web_return=null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_topuptixan_web);
String url = "https://www.baidu.com/";//测试访问百度首页
webView = (android.webkit.WebView) this.findViewById(R.id.webView);
pg=(ProgressBar) findViewById(R.id.progressBar);
web_title=(TextView)findViewById(R.id.web_title);
webView.getSettings().setJavaScriptEnabled(true);//支持JS
web_return=(TextView)findViewById(R.id.web_return);
webView.loadUrl(url);
init();
web_return.setOnClickListener(this);
}
private void init() {
WebChromeClient wvcc = new WebChromeClient() {
@Override
public void onReceivedTitle(android.webkit.WebView view, String title) {
web_title.setText("标题:" +title);
}
public void onProgressChanged(android.webkit.WebView view, int newProgress) {
if(newProgress==100){
pg.setVisibility(View.GONE);//加载完网页进度条消失
}
else{
pg.setVisibility(View.VISIBLE);//开始加载网页时显示进度条
pg.setProgress(newProgress);//设置进度值
}
}
};
// 设置setWebChromeClient对象
webView.setWebChromeClient(wvcc);
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(android.webkit.WebView view, String url) {
view.loadUrl(url);
return true;
}}
);
}
//设置手机物理返回键动做(防止按返回键直接退出程序)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO 自动生成的方法存根
if(keyCode==KeyEvent.KEYCODE_BACK) {
if((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {//当webview不是处于第一页面时,返回上一个页面
webView.goBack();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.web_return:
actionKey(KeyEvent.KEYCODE_BACK);
break;
}
}
//设置自定义返回键动做
public void actionKey(final int keyCode) {
new Thread () {
public void run () {
try {
Instrumentation inst=new Instrumentation();
inst.sendKeyDownUpSync(keyCode);
} catch(Exception e) {
e.printStackTrace();
}
}
}.start();
}
}
其中涉及标题内容的代码主要是onReceivedTitle()方法和设置setWebChromeClient对象webView.setWebChromeClient(wvcc);
下面是效果图
这里会涉及到一个问题,就是标题栏内容太长,我这里由于这个web_title_bar是一个相对布局,若是不设置TextView属性的话会出现一些问题,好比说下面这种状况
为了避免出现刚才的问题,可是又要title内容居中显示,所以个人web_title_bar布局中标题内容的TextView修改为了下面的样式android
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="55dp" android:background="@color/app" android:id="@+id/title_bar">
<TextView android:id="@+id/web_return" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:gravity="center" android:padding="10dp" android:text="返回" android:textColor="@color/white" android:textSize="@dimen/result_text" />
<TextView android:id="@+id/web_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:layout_gravity="center" android:gravity="center" android:text="测试" android:maxEms="15" android:lines="1" android:ellipsize="end" android:textColor="@color/white" android:textSize="20sp" />
</RelativeLayout>
不知道你们对于我刚才碰见的问题有没有什么更好的方法解决,若是有的话请说明一下。web