大佬教程收集整理的这篇文章主要介绍了android – 在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)
提前致谢 :)
您可以使用以下
@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); }
编辑:
<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,请注明来意。