>source

경고 대화 상자에서 단추를 클릭하여 웹보기를 열려고합니다. 모든 것이 작동하지만 프로그래밍 방식으로 만든 뷰의 높이가 경고 대화 상자와 일치하지 않습니다.

내 경고 대화 코드는 다음과 같습니다.

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

로더 및 웹뷰 코드는 다음과 같습니다.

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

로더가 웹뷰로드를 마치면 150 픽셀의 제한된 영역에도 표시됩니다. 저는 프레임 레이아웃의 자식 인 선형 레이아웃에 150 픽셀 만 적용합니다.

디버깅 할 때 webview와 loader의 높이가 모두 150 픽셀임을 알 수 있습니다.

아래는 활동의 스크린 샷입니다

Alertdialog setview 문제

  • 답변 # 1

    효과가 있다면 아래와 같이 변경해보세요.

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

    효과 (GifImageView 대신 ImageView로 테스트) :

관련 자료

  • 이전 css - 조명 요소 + SASS의 웹 구성 요소
  • 다음 xamarin - 크로스 플랫폼 프로젝트에서 페이지 전환시 SetCustomAnimations를 사용하는 방법