Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 在WebView中启用后退按钮大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我刚刚开始使用 Android SDK.我想用WebView创建一个显示本地网页的简单应用程序.我已经使用了我在网上找到的例子来制作它.

该应用程序工作得很好,直到我想添加一个后退按钮.当按下电话后退按钮时,应用程序崩溃.

这是我的MainActivity.java

package com.hspd.avhor;

import android.app.Activity;
import android.os.bundle;
import android.view.Menu;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends Activity {

    WebView wv;

    @Override
    protected void onCreate(Bundle savedInstanceStatE) {
        super.onCreate(savedInstanceStatE);
        setContentView(R.layout.activity_main);
        WebView wv = (WebView)findViewById(R.id.hspd_webview);
        wv.setWebViewClient(new WebViewClient() {
            @Override
            public Boolean shouldOverrideUrlLoading(WebView view,String url){
                view.loadUrl(url);
                return true;
            }
        });
        wv.loadUrl("file:///android_asset/one.htm");
    }

    @Override
    public void onBACkPressed()
    {
        if(wv.canGoBACk())
            wv.goBACk();
        else
            super.onBACkPressed();
    }

    @Override
    public Boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
    }

}

这是我的activity_main.xml:

<ScrollView xmlns:android="http://scheR_543_11845@as.android.com/apk/res/android"
    xmlns:tools="http://scheR_543_11845@as.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <WebView
        android:id="@+id/hspd_webview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</ScrollView>

这是我在logcat中的错误

04-22 17:48:06.953: W/dalvikvm(799): threadid=1: thread exiTing with uncaught exception (group=0x40a71930)
04-22 17:48:06.972: E/AndroidRuntime(799): FATAL EXCEPTION: main
04-22 17:48:06.972: E/AndroidRuntime(799): java.lang.NullPointerException
04-22 17:48:06.972: E/AndroidRuntime(799):  at com.hspd.avhor.MainActivity.onKeyDown(MainActivity.java:41)
04-22 17:48:06.972: E/AndroidRuntime(799):  at android.view.KeyEvent.dispatch(KeyEvent.java:2609)
04-22 17:48:06.972: E/AndroidRuntime(799):  at android.app.Activity.dispatchKeyEvent(Activity.java:2375)
04-22 17:48:06.972: E/AndroidRuntime(799):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1847)
04-22 17:48:06.972: E/AndroidRuntime(799):  at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3701)
04-22 17:48:06.972: E/AndroidRuntime(799):  at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3651)
04-22 17:48:06.972: E/AndroidRuntime(799):  at android.view.ViewRootImpl$ViewRootHandler.handlemessage(ViewRootImpl.java:2818)
04-22 17:48:06.972: E/AndroidRuntime(799):  at android.os.Handler.dispatchmessage(Handler.java:99)
04-22 17:48:06.972: E/AndroidRuntime(799):  at android.os.Looper.loop(Looper.java:137)
04-22 17:48:06.972: E/AndroidRuntime(799):  at android.app.ActivityThread.main(ActivityThread.java:5041)
04-22 17:48:06.972: E/AndroidRuntime(799):  at java.lang.reflect.Method.invokeNative(Native Method)
04-22 17:48:06.972: E/AndroidRuntime(799):  at java.lang.reflect.Method.invoke(Method.java:511)
04-22 17:48:06.972: E/AndroidRuntime(799):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-22 17:48:06.972: E/AndroidRuntime(799):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-22 17:48:06.972: E/AndroidRuntime(799):  at dalvik.system.NativeStart.main(Native Method)

提前致谢 :)

解决方法

覆盖onKeyDown(params),检查按下的键是否为后退按钮,检查webview是否可以导航到上一页,如果是,则导航到上一页.如果没有要显示的网页,您可以完成活动

您可以使用以下

@Override
public Boolean onKeyDown(int keyCode,KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBACk()) { 
            //if BACk key pressed and webview can navigate to prevIoUs page
        webView.goBACk();
            // go BACk to prevIoUs page
        return true;
    }
    else
    {
        finish();
           // finish the activity
    }
    return super.onKeyDown(keyCode,event);
}

编辑:

删除xml布局中的scrollview.试试下面的内容

<LinearLayout xmlns:android="http://scheR_543_11845@as.android.com/apk/res/android"
xmlns:tools="http://scheR_543_11845@as.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<WebView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/wv"></WebView>
</LinearLayout>

编辑:2

这是一个有效的样本.在三星galaxy s3上测试过

activtiy_main.xml

<RelativeLayout xmlns:android="http://scheR_543_11845@as.android.com/apk/res/android"
xmlns:tools="http://scheR_543_11845@as.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<WebView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:id="@+id/wv"/>

</RelativeLayout>

主要活动

public class MainActivity extends Activity {
 private WebView webView;

@Override
protected void onCreate(Bundle savedInstanceStatE) {
    super.onCreate(savedInstanceStatE);


        setContentView(R.layout.activity_main);
        webView = (WebView) findViewById(R.id.wv);
        webView.getSetTings().setJavaScriptEnabled(true);
        webView.setWebChromeClient(new WebChromeClient() {
               public void onProgressChanged(WebView view,int progress) {
                MainActivity.this.setProgress(progress * 1000);
               }
             });
             webView.setWebViewClient(new WebViewClient() {
               public void onReceivedError(WebView view,int errorCode,String description,String failingUrl) {
                 Toast.makeText(MainActivity.this,"Oh no! " + description,Toast.LENGTH_SHORT).show();
               }
             });

             webView.loadUrl("http://slashdot.org/");

}   



@Override
public Boolean onKeyDown(int keyCode,KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBACk()) {
        webView.goBACk();
        return true;
    }
    else
    {
        finish();
    }
    return super.onKeyDown(keyCode,event);
}
}

大佬总结

以上是大佬教程为你收集整理的android – 在WebView中启用后退按钮全部内容,希望文章能够帮你解决android – 在WebView中启用后退按钮所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。