Android WebView的使用与后退键处理详细讨论
前言
webView是Android中常用的组件之一,用于展示网页内容。它可以加载HTML文件、URL链接等网页内容,并提供交互功能。在使用webView时,我们经常会涉及到后退键处理,下面让我们详细讨论一下webView的使用和后退键处理。
首先,我们需要在布局文件中添加webView组件
<WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent" />
在Activity中获取webView实例,并加载网页内容
:
WebView webView = findViewById(R.id.webView); webView.loadUrl("http://www.example.com");
以上代码中,我们获取了布局文件中的webView组件,并使用loadUrl()方法加载了指定的URL链接。如果要加载本地的HTML文件,可以使用loadUrl(“file:///android_asset/your_file.html”)方法。
当webView加载网页时,我们可能需要处理一些事件,比如点击链接时打开新网页、后退键按下时返回上一页等。下面我们来详细讨论一下后退键处理。
首先,在Activity中重写onKeyDown()方法,用于监听后退键的按下事件:
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { //处理后退键事件 return true; } return super.onKeyDown(keyCode, event); }
在上述代码中,我们判断了按下的键是否为后退键,并且事件的动作是否为按下(ACTION_DOWN)。如果条件成立,则表示后退键被按下,我们可以在条件成立的地方添加我们的后退逻辑。
在webView中,我们可以使用goBack()方法来返回上一页。所以,在后退键按下时,我们可以调用webView的goBack()方法来实现返回上一页的功能。具体代码如下:
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { if (webView.canGoBack()) { //如果webView可以返回上一页,则调用goBack()方法返回上一页 webView.goBack(); } else { //否则,执行其他逻辑(比如退出Activity) finish(); } return true; } return super.onKeyDown(keyCode, event); }
在上述代码中,我们添加了一个判断语句,判断webView是否可以返回上一页。如果可以,则调用webView的goBack()方法返回上一页。如果不可以,则执行其他逻辑(比如退出Activity)。
另外,我们还可以通过监听webView的历史记录来判断是否可以返回上一页。webView提供了一个WebViewClient类,该类中有一个shouldOverrideUrlLoading()方法,可以用于监听webView的url加载事件。我们可以通过重写该方法,并在方法中判断webView的历史记录来判断是否可以返回上一页。具体代码如下:
webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (webView.canGoBack()) { //如果webView可以返回上一页,则调用goBack()方法返回上一页 webView.goBack(); } else { //否则,执行其他逻辑(比如退出Activity) finish(); } return true; } });
在上述代码中,我们通过webView的setWebViewClient()方法设置了一个新的WebViewClient实例,并重写了其shouldOverrideUrlLoading()方法。在方法中,我们判断了webView是否可以返回上一页,如果可以,则调用goBack()方法返回上一页。如果不可以,则执行其他逻辑(比如退出Activity)。
除了上述的代码实现方式,我们还可以通过webView的WebChromeClient类来监听后退键的按下事件。WebChromeClient类有一个onKeyDown()方法,可以用于监听键盘按键的按下事件。具体代码如下:
webView.setWebChromeClient(new WebChromeClient() { @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { if (webView.canGoBack()) { //如果webView可以返回上一页,则调用goBack()方法返回上一页 webView.goBack(); } else { //否则,执行其他逻辑(比如退出Activity) finish(); } return true; } return super.onKeyDown(keyCode, event); } });
在上述代码中,我们通过webView的setWebChromeClient()方法设置了一个新的WebChromeClient实例,并重写了其onKeyDown()方法。在方法中,我们判断了按下的键是否为后退键,并且事件的动作是否为按下(ACTION_DOWN)。如果条件成立,则表示后退键被按下,我们可以在条件成立的地方添加我们的后退逻辑。
以上就是webView的使用和后退键处理的详细讨论。对于webView的使用,我们可以通过loadUrl()方法加载网页内容,还可以监听webView的各种事件来实现特定的功能。而对于后退键处理,我们可以重写Activity的onKeyDown()方法,通过判断后退键的按下事件来实现返回上一页的功能。同时,我们还可以通过监听webView的历史记录或使用WebChromeClient来实现后退键的处理。
附:Android 开发之webview页面返回到最顶关闭
public class MyWebViewActivity extends Activity { private Context context = this; // 底部菜单View // public static View bottomView; private WebViewProgressBar webView; private String url; private HtmlBean bean; // 手势 private GestureDetector mGestureDetector; private TextView btn_goback; String title; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.usershop_layout); MyUtils.checkStrictMode(true); url = getIntent().getStringExtra("url"); if (!TextUtils.isEmpty(title)) { TextView tv_title = (TextView) findViewById(R.id.title_text); if (title.length() > 6) { title = title.substring(0, 6); } tv_title.setText(title); } if (TextUtils.isEmpty(url)) { Toast.makeText(this, "没有找到相关的链接地址", Toast.LENGTH_LONG).show(); return; } initWebView(); this.initJsInterface(); initGestureDetector(); } // 初始化webView private void initWebView() { // 底部菜单 // bottomView = findViewById(R.id.user_bottom); btn_goback=(TextView)findViewById(R.id.btn_goback); // WebView webView = (WebViewProgressBar) findViewById(R.id.user_webview); // 滚动条 webView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY); // 脚本支持 webView.getSettings().setJavaScriptEnabled(true); // 缩放 webView.getSettings().setSupportZoom(true); webView.loadUrl(url); // WebView客户端 webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String nextUrl) { // 下一个链接 try { if(title.equals("个人中心")){ url=nextUrl; } } catch (Exception e) { } view.loadUrl(nextUrl); return true; } // 开始加载 @Override public void onPageStarted(WebView view, String url2, Bitmap favicon) { // TODO Auto-generated method stub } // 加载完毕 @Override public void onPageFinished(WebView view, String url2) { } }); btn_goback.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); // WebView的滑动事件交个手势处理 webView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub return mGestureDetector.onTouchEvent(event); } }); } // 初始化手势 private void initGestureDetector() { mGestureDetector = new GestureDetector(this, new OnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { // TODO Auto-generated method stub return false; } @Override public void onShowPress(MotionEvent e) { // TODO Auto-generated method stub } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // TODO Auto-generated method stub return false; } @Override public void onLongPress(MotionEvent e) { // TODO Auto-generated method stub } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return false; } @Override public boolean onDown(MotionEvent e) { // TODO Auto-generated method stub return false; } }, new Handler() { }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { ShareDao.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data); } public void btn_on(View view){ if(webView.canGoBack()){ webView.goBack(); // goBack()表示返回WebV }else { finish(); } } } }
总结
到此这篇关于Android WebView的使用与后退键处理的文章就介绍到这了,更多相关Android WebView使用与后退键内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
android开发教程之listview显示sqlite数据
这篇文章主要介绍了android使用listview显示sqlite数据的方法,需要的朋友可以参考下2014-03-03Android控件RecyclerView实现混排效果仿网易云音乐
这篇文章主要为大家详细介绍了Android控件RecyclerView实现混排效果,仿网易云音乐,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-10-10Android中AsyncTask异步任务使用详细实例(一)
AsyncTask是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程,通过本文给大家介绍Android中AsyncTask异步任务使用详细实例(一),需要的朋友参考下2016-02-02
最新评论