I am trying to open a webview from a button click in a alert dialog. everything works but the height of the view which I have created programmatically is not matching alert dialog.
my alert dialog code is:
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(_context);
AlertDialog alert = alertBuilder.Create();
switch (_type)
{
case ButtonType.PdfButton:
//open pdf
if (_pdfUrlType)
alert.SetView(PdfHandler(alert));
break;
default:
break;
}
alert.Show();
alert.Window.SetLayout(700, 1800);
}
catch (Exception ex)
{
}
finally
{
}
and I am calling pdf handler which calls URL pdf
private FrameLayout PdfHandler(AlertDialog dialog)
{
if (_pdfUrlType)
{
return GenerateUrlPdf(dialog);
}
}
below is code for generateurlpdf
private FrameLayout GenerateUrlPdf(AlertDialog dialog)
{
FrameLayout layout = new FrameLayout(_context);
FrameLayout.LayoutParams lpMatchParent = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MatchParent, FrameLayout.LayoutParams.MatchParent);
//layout.LayoutParameters = lpMatchParent; // i applied this on frame layout but didn't work out
// I also tried to get alertdialog height during runtime but it shows zero bcz its isn't made yet
var loader = GenerateLoaderGif();
var webView = GenerateWebView(loader);
layout.AddView(webView, lpMatchParent);
layout.AddView(loader, lpMatchParent);
return layout;
}
loader and webview code is given below
private WebView GenerateWebView(LinearLayout _loader)
{
WebView _view = new WebView(Application.Context);
((WebView)_view).Settings.JavaScriptEnabled = true;
((WebView)_view).Settings.SetAppCacheEnabled(true);
((WebView)_view).Settings.SetAppCacheMaxSize(long.MaxValue);
((WebView)_view).Settings.AllowFileAccess = true;
((WebView)_view).Settings.CacheMode = CacheModes.CacheElseNetwork;
((WebView)_view).LoadUrl("https://docs.google.com/gview?url=" + _url);
return _view;
}
private LinearLayout GenerateLoaderGif()
{
LinearLayout _loader = new LinearLayout(_context);
GifImageView GifView = new GifImageView(_context);
LinearLayout.LayoutParams loaderparams = new LinearLayout.LayoutParams(150, 150);
loaderparams.Gravity = GravityFlags.Center;
_loader.SetGravity(GravityFlags.Center);
_loader.SetBackgroundColor(Color.ParseColor("#9B000000"));
Stream input = _context.Resources.OpenRawResource(Resource.Drawable.loadingGif);
GifView.SetBytes(Common.ConvertStreamToByte(input));
GifView.StartAnimation();
_loader.AddView(GifView, loaderparams);
return _loader;
}
when the loader is finished loading webview is also shown in a limited area of 150 pixel i am only applying 150 pixel to a linear layout which is a child of framelayout.
on debugging i get to see that the height of webview and loader both are 150 pixel.
below is screenshot of activity
Try to change like below,if its effect,you want ?
private FrameLayout GenerateUrlPdf(AlertDialog dialog)
{
FrameLayout layout = new FrameLayout(this);
FrameLayout.LayoutParams lpMatchParent = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MatchParent,FrameLayout.LayoutParams.MatchParent);
//layout.LayoutParameters = lpMatchParent; // i applied this on frame layout but didn't work out
// I also tried to get alertdialog height during runtime but it shows zero bcz its isn't made yet
var loader = GenerateLoaderGif();
var webView = GenerateWebView(loader);
//webView.LayoutParameters = lpMatchParent;
layout.AddView(webView);
layout.AddView(loader);
return layout;
}
private LinearLayout GenerateLoaderGif()
{
LinearLayout _loader = new LinearLayout(this);
ImageView GifView = new ImageView(this);
LinearLayout.LayoutParams loaderparams = new LinearLayout.LayoutParams(150, 150);
loaderparams.Gravity = GravityFlags.Center;
_loader.SetGravity(GravityFlags.Center);
_loader.SetBackgroundColor(Color.ParseColor("#9B000000"));
GifView.SetImageResource(Resource.Drawable.fivePlus);
_loader.LayoutParameters = loaderparams;
_loader.AddView(GifView);
return _loader;
}
the effect (i just test with ImageView instead of GifImageView):