如何在我的应用程序中打开网页?

20

这是我在这里的第一个问题。我知道这个问题之前已经被问过了,但我没有找到一个能够真正解释答案给像我这样的新手的答案/解决方案。

我正在创建一个带有线性布局的应用程序,其中有许多按钮,每个按钮都应该将用户驱动到不同的网页。按钮工作良好,每个按钮都可以进入其特定的网页,但是在默认浏览器中打开,而不是在应用程序内部。

这是我的webview.xml文件:

<WebView  xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />

这是WebViewActivity.java文件:

public class WebViewActivity extends Activity {

private WebView webView;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview);

    webView = (WebView) findViewById(R.id.webView1);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl(
            "http://egy-tech-droid.blogspot.com.eg/search/label/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA%20%D8%AD%D8%B5%D8%B1%D9%8A%D8%A9");

}

我在Manifest文件中添加了Internet权限:

 <uses-permission android:name="android.permission.INTERNET" />

这会在设备的默认浏览器中打开网页,但我想要它在我的应用程序内打开。有什么帮助吗?(请给我一个详细的答案/解释)

这将在设备的默认浏览器中打开网页,您可以使用 WebView 将其嵌入到您的应用程序中。WebView 允许您加载和显示其他网页或应用程序。您可以通过在布局中添加 WebView 组件来实现此目标,并使用 WebView.loadUrl() 方法来加载您要显示的网址。


WebViewClient设置为您的webView,以使用应用程序打开网页https://dev59.com/pGw15IYBdhLWcg3wD3np - Jibran Khan
请看这里:http://www.tutorialspoint.com/android/android_webview_layout.htm - IntelliJ Amiya
@JibranKhan .. 感谢你的帮助。 - M. Omar
@IntelliJAmiya 我会看一下的,谢谢。 - M. Omar
8个回答

15

将此代码添加到您的代码中

webView.setWebViewClient(new WebViewClient(){

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url){
      view.loadUrl(url);
      return true;
    }
});

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.webkit.WebView.setWebViewClient(android.webkit.WebViewClient)' on a null object reference - auspicious99

2

Sunny的答案的Kotlin版本

webView.webViewClient = object : WebViewClient() {
    override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
        view?.loadUrl(request?.url.toString())
        return true
    }
}

2

为了覆盖默认的行为(使用网络浏览器打开链接),你需要设置一个WebViewClient

请使用以下代码:

webview.setWebViewClient(new WebViewClient());

Android文档中写道:

public void setWebViewClient (WebViewClient client)

设置将接收各种通知和请求的WebViewClient。这将替换当前处理程序。


(说明:该方法用于设置WebViewClient,它将接收各种通知和请求。)

2

欢迎查看完整代码:

OnCreate()函数:

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

        if(Constants.isNetworkAvailable(mContext)){
            webView.setWebViewClient(new MyWebViewClient());
            webView.setWebChromeClient(new WebChromeClient() );

            webView.getSettings().setJavaScriptEnabled(true);     
            webView.getSettings().setPluginState(PluginState.ON);
            webView.getSettings().setBuiltInZoomControls(true);
            webView.getSettings().setSupportZoom(true); 

            webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
            webView.setScrollbarFadingEnabled(false);

            webView.setInitialScale(30);
            webView.loadUrl(url);

        }else{
            Toast.makeText(mContext, Constants.msgNoInternet, Toast.LENGTH_LONG).show();
        }

我的WebViewClient:

private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);

            if (!pDialog.isShowing()) {
                pDialog.show();
            }

            return true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            //view.loadUrl(url);
            System.out.println("on finish");
            if (pDialog.isShowing()) {
                pDialog.dismiss();
            }

        }
    }

1

如今谈论Web时,不得不考虑Javascript。默认情况下,在WebView中不启用它。要启用Javascript,只需插入以下代码:

WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);

0

希望这能对你有所帮助。

在你的网页视图布局中:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RelativeLayout
        android:id="@+id/relay"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#c7bbac">

        <ImageView
            android:id="@+id/txtmain"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:scaleType="fitXY"
            android:src="@drawable/topbar50" />

        <ImageView
            android:id="@+id/backbutn"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:adjustViewBounds="true"
            android:paddingTop="2dp"
            android:src="@drawable/backbtn" />
    </RelativeLayout>

    <WebView  
        android:id="@+id/webView1"
        android:layout_below="@+id/relay"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</RelativeLayout>

Webview按钮点击事件:

webbutton = (ImageView) findViewById(R.id.web);
webbutton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
        Intent intent = new Intent(getApplicationContext(), WebViewActivity.class);
        startActivity(intent);
    }
});

Webview活动:

public class WebViewActivity extends Activity {

private WebView webViewurl;
ImageView back;
AndroidInterface AMW = AndroidInterface.GetInstance();

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview);
    back = (ImageView) findViewById(R.id.backbutn);
    webViewurl = (WebView) findViewById(R.id.webView1);

    webViewurl.getSettings().setJavaScriptEnabled(true);

    webViewurl.getSettings().setBuiltInZoomControls(true);
    final Activity activity = this;
    webViewurl.setWebViewClient(new WebViewClient() {
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
        }
    });
    webViewurl.loadUrl("http://example.com");

    back.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            finish();
        }
    });
}

我应该把Webview按钮的Onclick放在哪里?...“AndroidInterface”是什么?那是我应该添加到项目中的新类吗(提醒您,我完全是新手,所以您的答案对我来说不够清晰,但还是谢谢) - M. Omar
Android界面在这里并不重要,你只需要省略掉它。在你想打开Webview页面的地方放置一个按钮,在按钮的onclick监听器中调用Webview活动即可。@M.Omar - MurugananthamS

0
 webView = (WebView) findViewById(R.id.youtubelink);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl("your url");

        webView.setWebViewClient(new WebViewClient() {

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });

-1

WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.loadUrl("http://www.google.co.in");

这段代码运行良好...

上述代码会在您的应用程序中打开链接。


我觉得你没有仔细阅读我的代码!我已经在使用这段代码,并且它可以在默认浏览器中打开网页。 - M. Omar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接