android - Android警报对话框自定义视图与父高度不匹配
问题描述
我正在尝试通过单击警报对话框中的按钮打开 web 视图。一切正常,但我以编程方式创建的视图高度与警报对话框不匹配。
我的警报对话框代码是:
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
{
}
我正在调用调用 URL pdf 的 pdf 处理程序
private FrameLayout PdfHandler(AlertDialog dialog)
{
if (_pdfUrlType)
{
return GenerateUrlPdf(dialog);
}
}
下面是 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 和 webview 代码如下
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;
}
当加载器完成加载时,webview 也显示在 150 像素的有限区域中,我仅将 150 像素应用于作为框架布局子级的线性布局。
在调试时我看到 webview 和 loader 的高度都是 150 像素。
下面是活动截图
解决方案
尝试像下面这样改变,如果它的效果,你想要吗?
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;
}
效果(我只是用 ImageView 而不是 GifImageView 测试):
推荐阅读
- php - 将表单数据插入 SQL 表
- python - 避免被识别为垃圾邮件
- sql - PostgreSQL:我想知道'cast'的区别
- python - 在 tf.layers.conv2d 中,使用 use_bias=True,偏差是绑定的还是解绑的?
- html - 标题中的列表项不是很居中(使用 Flexbox)
- python - 非常相同的数据和非常相似的 catboost 模型之间的特征重要性截然不同
- android - 如何固定 TableLayout 的第一行?
- graph - 如何在乳胶上绘制加权图?
- django - 是否可以使用非默认数据库连接删除应用程序的默认数据库迁移?
- powershell - AD域迁移后使用powershell进行权限映射