我一直在尝试使用monodroid在应用程序使用的WebView
中显示进度条实现。我已达到相当远但似乎无法解决难题的最后部分。我正在使用Monodroid Pro的付费版本,并使用Galaxy S2作为测试设备。
以下是我到目前为止所做的事情: -
在OnCreate
部分: -
Window.RequestFeature(WindowFeatures.Progress);
SetContentView(Resource.Layout.Main);
Window.SetFeatureInt(WindowFeatures.Progress, Window.ProgressVisibilityOn);
wv.SetWebViewClient(new monitor());
wv.LoadUrl("https://www.google.com");
现在on on progress改变了覆盖方法: -
private class progress : WebChromeClient
{
public override void OnProgressChanged(WebView view, int newProgress)
{
base.OnProgressChanged(view, newProgress);
}
}
现在我看到的解决方案是用于Android的java实现,这非常简单,即: -
webview.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress)
{
//Make the bar disappear after URL is loaded, and changes string to Loading...
MyActivity.setTitle("Loading...");
MyActivity.setProgress(progress * 100); //Make the bar disappear after URL is loaded
//Return the app name after finish loading
if(progress == 100)
MyActivity.setTitle(R.string.app_name);
}
});
但是使用monodroid我不能像在Android实现中那样使用SetProgress
方法,Activity
实例可以在OnCreate
方法中进行,而在Monodroid中,一个全新的类是制作然后webchromeclient
首先继承,然后继承。我错过了什么?还有另一种我不知道的方式吗?一些帮助将非常感激。
答案 0 :(得分:2)
C#不支持像Java这样的匿名类,因此您需要定义一个单独的类。 Activity.SetProgress()
方法是公共的,这意味着您可以将对活动的引用传递给类,并使用它来调用方法:
public class CustomWebChromeClient : WebChromeClient
{
private Activity _context;
public CustomWebChromeClient(Activity context)
{
_context = context;
}
public override void OnProgressChanged(WebView view, int newProgress)
{
base.OnProgressChanged(view, newProgress);
_context.SetProgress(newProgress * 100);
}
}
然后你的活动可以创建这个类的一个实例,将它自己传递给构造函数:
webview.SetWebChromeClient(new CustomWebChromeClient(this));
我有一个更完整的浏览器演示available here,也可以帮助您开始。