gpt4 book ai didi

java - 向 Android 应用程序 WebView 添加后退按钮/主页功能和外部浏览器

转载 作者:行者123 更新时间:2023-12-01 05:00:37 26 4
gpt4 key购买 nike

我尝试了很多方法,但我的 Android 应用程序不断收到崩溃错误。我的应用程序是一个使用 webview 函数的简单 webwrapper 应用程序。基本上,我有 webview 显示一个具有移动网站的网站。我想做的就是做到这一点

  1. 后退按钮将使用户返回到上一个屏幕
  2. 应用程序上的后退按钮(我将其放入布局中)也会将用户带到上一个屏幕。
  3. 我还希望通过手机上的主屏幕按钮返回主屏幕并完全退出应用。
  4. 最后,移动应用具有外部链接,这些链接应进入浏览器而不是停留在应用内(例如:访问完整网站)。

下面是我的代码,任何对 1-4 个问题的帮助都会有帮助! :-)!如果您需要查看我的 XML,请随时询问。

package com.example.envision;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.DownloadListener;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.ProgressBar;

public class Envision extends Activity {
/** back button functionality NOT WORKING CAUSES A CRASH
WebView webview;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.getAction() == KeyEvent.ACTION_DOWN) {
switch(keyCode)
{
case KeyEvent.KEYCODE_BACK:
if(webview.canGoBack() == true){
webview.goBack();
} else {
finish();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
} */

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_envision);

WebView webview = (WebView) findViewById(R.id.webView1);

WebSettings websettings = webview.getSettings();

websettings.setJavaScriptEnabled(true);
websettings.setSaveFormData(false);
websettings.setSavePassword(false);

webview.loadUrl("http://envisionfinancial.ca/m/");
webview.setHorizontalScrollBarEnabled(false);
webview.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
webview.setBackgroundColor(128);

webview.setWebViewClient(new EnvisionWebViewClient());

webview.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimetype,
long contentLength) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
}


});

}

public void visible(){

WebView webview = (WebView) findViewById(R.id.webView1);

ImageView logo = (ImageView) findViewById(R.id.imageView1);

ProgressBar bar = (ProgressBar) findViewById(R.id.progressBar1);

webview.setVisibility(10);

logo.setVisibility(0);

bar.setVisibility(0);

}

public void unvisible(){

WebView webview = (WebView) findViewById(R.id.webView1);

ImageView logo = (ImageView) findViewById(R.id.imageView1);

ProgressBar bar = (ProgressBar) findViewById(R.id.progressBar1);

webview.setVisibility(0);

logo.setVisibility(10);

bar.setVisibility(10);

}


private class EnvisionWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView webview, String url){
webview.loadUrl(url);
return true;
}


@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
// TODO Auto-generated method stub
view.loadUrl("http://envisionfinancial.ca/m/");
}

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {

visible();

}

@Override
public void onPageFinished(WebView view, String url) {

unvisible();

}

}
/** exits the app?? review */
public void finishActivity(View v) {
finish();

}
}

最佳答案

您在 onKeyDown 中遇到 NullPointerException 吗?这是因为您没有将 WebView 分配给实例变量:

webview = (WebView) findViewById(R.id.webView1);

返回功能可以这样实现:

public void onBackPressed() {
if (webview.canGoBack())
webview.goBack();
else
super.onBackPressed();
}

关于java - 向 Android 应用程序 WebView 添加后退按钮/主页功能和外部浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13443928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com