2015-08-17 2 views
0

Я получаю ошибку java.lang.IllegalArgumentException: width and height must be > 0, и я думаю, что эта ошибка может быть вызвана веб-просмотром. Я пытаюсь показать рендер PDF-файл в веб-режиме, и есть некоторые файлы, которые работают нормально, но другие запускают эту ошибку.WebView: java.lang.IllegalArgumentException: ширина и высота должны быть> 0

activity_convert.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<WebView 
    android:id="@+id/webView1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

</LinearLayout> 

OnCreate метод:

//Setup webview 
    wv = (WebView)findViewById(R.id.webView1); 
    wv.getSettings().setBuiltInZoomControls(true);//show zoom buttons 
    wv.getSettings().setSupportZoom(true);//allow zoom 
    //get the width of the webview 

    wv.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      ViewSize = wv.getWidth(); 
      //ViewSize = wv.getHeight(); 
      System.out.println("webView: " + wv.getWidth()); 
      System.out.println("webView: " + wv.getHeight()); 
      wv.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
     } 
    }); 

PDF визуализации:

//create pdf document object from bytes 
ByteBuffer bb = ByteBuffer.NEW(data); 
PDFFile pdf = new PDFFile(bb); 
//Get the first page from the pdf doc 
PDFPage PDFpage = pdf.getPage(1, true); 
//create a scaling value according to the WebView Width 
final float scale = ViewSize/PDFpage.getWidth() * 0.95f; 
//convert the page into a bitmap with a scaling value 
Bitmap page = PDFpage.getImage((int)(PDFpage.getWidth() * scale), (int)(PDFpage.getHeight() * scale), null, true, true) 

Я читал несколько постов здесь с той же проблемой, но их решения доном Не работаем для моего кода. Я попытался получить параметры ширины и высоты, но я не могу понять, почему это не работает.

ответ

0

проблема с ViewTreeObserver. Вы пытаетесь получить ширину и высоту элементов, которые еще не были нарисованы.

Короче говоря, виды еще не построены в onCreate(), onStart() или onResume(). Поскольку они технически не существуют (насколько это касается ViewGroup), их размеры равны 0.

В течение длительного времени вы можете перейти сюда для лучшего объяснения того, как с ним обращаться.

How do you to retrieve dimensions of a view? getHeight() and getWidth() always return zero

Я рекомендую вам попробовать DisplayMetrics, чтобы получить высоту и ширину ..

как this

+0

Я устал, что вы сказали, но он по-прежнему не работает. –

Смежные вопросы