Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android?;_Java_Android_Xml_Webview - Fatal编程技术网

Java 在Android?;

Java 在Android?;,java,android,xml,webview,Java,Android,Xml,Webview,我是android应用程序开发和学习方面的新手。 我开发了一个应用程序,它使用WebView加载网站链接。它工作得很好 但是当WebView加载页面时,我面临显示和隐藏进度条的问题 我想在WebView加载网站的主链接和内部链接时显示一个进度条(只是中间的微调器),并在页面完全加载时隐藏进度条 我的Java代码: package in.matebook.myapplication; import android.app.Activity; import android.content.Inte

我是android应用程序开发和学习方面的新手。

我开发了一个应用程序,它使用
WebView
加载网站链接。它工作得很好

但是当
WebView
加载页面时,我面临显示和隐藏进度条的问题

我想在WebView加载网站的主链接和内部链接时显示一个进度条(只是中间的微调器),并在页面完全加载时隐藏进度条

我的Java代码:

package in.matebook.myapplication;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView myWebView = (WebView) findViewById(R.id.webView);
        myWebView.setWebViewClient(new MyWebViewClient());
        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        myWebView.loadUrl("http://www.labnol.org");
    }



    private class MyWebViewClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            if (Uri.parse(url).getHost().equals("www.labnol.org")) {
                // This is my web site, so do not override; let my WebView load the page
                //or we can add more allowed host in if condition
                return false;
            }
            // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            return true;
        }


    }



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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
和我的布局XML代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


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

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleLarge"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

</RelativeLayout>
我也尝试过,但当我点击内部链接时,进度条不起作用

  • 我想在主页加载时显示进度条,在主页完全加载时隐藏进度条

  • 我想在用户点击网站的内部链接时再次显示进度条,和上面一样,在页面完全加载时隐藏进度条


  • 请帮助,我是Android应用程序开发的初学者。

    试试这段代码。。。您需要webChoromeClient来跟踪webview加载进度

    webView.setWebChromeClient(new WebChromeClient() {
    public void onProgressChanged(WebView view, int progress) {
        progressBar.setProgress(progress);
        if (progress == 100) {
            progressBar.setVisibility(View.GONE);
    
        } else {
            progressBar.setVisibility(View.VISIBLE);
    
        }
     }
    });
    
    用以下代码替换webview客户端

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

    如果有人正在寻找Kotlin解决方案,这个简单的解决方案对我很有用:

    private fun setupWebView() {
    
        val webViewClient: WebViewClient = object: WebViewClient() {
    
            override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
                view?.loadUrl(request?.url.toString())
                return super.shouldOverrideUrlLoading(view, request)
            }
    
            override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
                showProgressDialog()
                super.onPageStarted(view, url, favicon)
            }
    
            override fun onPageFinished(view: WebView?, url: String?) {
                hideProgressDialog()
                super.onPageFinished(view, url)
            }
        }
        webView.webViewClient = webViewClient
    
        webView.settings.javaScriptEnabled = true
        webView.settings.defaultTextEncodingName = "utf-8"
    }
    

    嘿,伙计们,我有一个有用的方法,这肯定也会对你们有所帮助。

    XML

    保证解决方案:

            webView.setWebViewClient(new WebViewClient() {
    
            @Override
            public void onPageCommitVisible(WebView view, String url) {
                super.onPageCommitVisible(view, url);
                mProgressBar.setVisibility(View.INVISIBLE);
            }
        });
    

    我在代码中添加了以下内容,对我来说效果非常好。

    XML:

       <WebView
        android:id="@+id/updates_webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"  />
    
       <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleLarge"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
    
    我已将setWebViewClient更改为setWebChromeClient并开始工作,但出现了一个新问题。当我在shouldOverrideUrlLoading方法之前使用@Override时。它说这个方法不会覆盖它的suerclass,我想当我点击任何链接时,它会提示我使用其他应用打开它。请帮我利用你的回答和解决这个问题。非常感谢。
    WebView webView = (WebView)findViewById(R.id.webid);
    WebSettings websettings = webView.getSettings();
    
    webSettings.setJavaScriptEnabled(true);
    webSettings.setGeolocationEnabled(true);
    webSettings.setSupportMultipleWindows(true);
    
    
    webView.setWebViewClient(new WebViewClient(){
    
        public void onPageFinished(WebView view,String url){
           ProgressBar progressbar = (ProgressBar) findViewById(R.id.progress_bar);
           progressbar.setVisibility(View.GONE);
           }
    });
    
            webView.setWebViewClient(new WebViewClient() {
    
            @Override
            public void onPageCommitVisible(WebView view, String url) {
                super.onPageCommitVisible(view, url);
                mProgressBar.setVisibility(View.INVISIBLE);
            }
        });
    
       <WebView
        android:id="@+id/updates_webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"  />
    
       <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleLarge"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
    
    public class HelloWebViewClient extends WebViewClient {
        @Override
        public void onPageFinished(WebView view, String url) {
            // TODO Auto-generated method stub
            super.onPageFinished(view, url);
            ProgressBar progressBar =  findViewById(R.id.progressBar1);
            progressBar.setVisibility(View.GONE);
        }
    }