【问题标题】:Android - Webview ProgressbarAndroid - Webview 进度条
【发布时间】:2013-11-05 16:47:31
【问题描述】:

我在 webview 上方添加了进度条。 每当我点击一个链接时,我只是让进度条可见。

我想在 webview 上叠加进度条,并且我想显示进度条的百分比。我知道css,但我不知道如何改变android中进度条的位置

<?xml version="1.0" encoding="utf-8"?>
<WebView  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/webview01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
/> 

MainActivity.java

public class MainActivity extends Activity {

WebView web;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    web = (WebView) findViewById(R.id.webview01);
 // request the progress-bar feature for the activity
    getWindow().requestFeature(Window.FEATURE_PROGRESS);

    // set a webChromeClient to track progress    
    web.setWebChromeClient(new WebChromeClient()
    {
        public void onProgressChanged(WebView view, int progress)
        {
            // update the progressBar
            MainActivity.this.setProgress(progress * 100);
        }
    });


    web.getSettings().setJavaScriptEnabled(true);
    web.loadUrl("url");

}

// To handle "Back" key press event for WebView to go back to previous screen.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if ((keyCode == KeyEvent.KEYCODE_BACK) && web.canGoBack()) {
        web.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

@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;
}

}

要显示进度条百分比,我需要修改此代码吗?或者我可以从这段代码中扩展功能吗?

【问题讨论】:

    标签: java android


    【解决方案1】:

    要显示“页面加载”进度条,请使用:

    在 onCreate() 中:

    // request the progress-bar feature for the activity
    getWindow().requestFeature(Window.FEATURE_PROGRESS);
    
    // set a webChromeClient to track progress    
    myWebView.setWebChromeClient(new WebChromeClient()
    {
     public void onProgressChanged(WebView view, int progress)
     {
       // update the progressBar
       MyActivity.this.setProgress(progress * 100);
     }
    });
    

    这将使用屏幕顶部的内置样式显示,就像内置浏览器一样。

    如果您想显示和更新自己的 ProgressBar,过程类似,获取进度条句柄:

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

    。 . . 在 onProgressChanged() 函数中,使用这个:

    myProgress.setProgress(progress * 100);
    

    而不是 MyActivity.this.setProgress()。

    此外,如果您想让 ProgressBar 出现在 WebView 的前面,则不能使用 LinearLayout。使用 centerInParent="true" 的 RelativeLayout,并在布局中的 WebView 之后列出 ProgressBar。

    【讨论】:

    • 我在web.setWebViewClient(new myWebClient()); Unfortunately app has stopped. There is a fata error in main.下面添加了你的行
    • 我显然对您的代码进行了以下更改。 MyActivity => MainActivity,myWebView 到 web 和 WebvView 到 WebView
    • 是 WebChromeClient,不是 WebViewClient
    • 使用“内置”progressBar 技术,你真的根本不需要你的WebViewClient,只需要WebChromeClient
    • 这就是我现在所拥有的。我更新了问题。仍然应用停止而没有运行!
    猜你喜欢
    • 2011-02-02
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多