2011-03-04 77 views
2

我想要做的典型事情,你加載數據到一個URL字符串,調用谷歌的圖表API與所有的日期,然後將其加載到Web視圖。谷歌圖表與Android Webview

問題:有人有直接「正確」的方式來做到這一點嗎?

我一直在搞這一整晚。

這裏的主要問題是:

web視圖設置爲FILL_PARENT。意思我真的不知道確切的寬度和高度。由於谷歌的API要求你提供一個寬度和高度,我究竟如何得到webviews的寬度和高度,所以我可以發送它?我想這個解決方案:

final WebView web = (WebView)findViewById(R.id.webviewgraph); 
    ViewTreeObserver tree = web.getViewTreeObserver(); 
    tree.addOnGlobalLayoutListener(new OnGlobalLayoutListener() 
    { 
     @Override 
     public void onGlobalLayout() 
     {...code continues 

,事情似乎是爲了,但是當我打電話web.getWidth(),web.getDrawingBounds(),或web.getMeasuredWidth(),我總是返回不止什麼屏幕實際上是成立的。現在我正在通過減去136像素的常量偏移來解決這個問題......但是,唉,這與所有設備都不一致。

有人知道使用谷歌地圖API與流體webview「正確」的方式?或者也許有人知道如何獲得視圖的實際正確寬度和高度?

感謝

UPDATE 我改變了我的代碼,這樣,現在我使用的覆蓋OnSizeChanged事件的自定義網頁流量。返回的寬度和高度...不幸的是仍然是相同的...太大了。

UPDATE 分析寬度和高度多後,我想出了這個:

int w = (int)((float)width * .667f); 
int h = (int)((float)height * .667f); 

到目前爲止,這是工作,我在測試設備上。爲什麼寬度和高度會比實際寬度返回1/3更多?我不知道。

回答

3

我還沒有時間仔細檢查,但我發現很可能您的0.667f與webview根據您的設備密度進行縮放的事實相關。

根據 http://developer.android.com/guide/webapps/targeting.html#ViewportDensity 「高密度裝置顯示了比實際像素分辨率的1.5倍預設的比例因數的網頁,以匹配目標密度」

您需要找到目標密度,用其作爲規模:

final float scale = getResources().getDisplayMetrics().density; 

// Your code: 
int w = (int)(width/scale); 
int h = (int)(height/scale); 

我不太好關於這個問題的閱讀,但我認爲你可以使用防止

縮放
<meta name="viewport" content="target-densitydpi=device-dpi" /> 

但不要聽我的話。另外,我不確定視口的哪個API級別有效。

1

你可以嘗試使用回調OnSizeChanged()嗎? 。他們說在渲染視圖後調用它,所以它應該保存關於WebView的實際大小的信息。

+0

嗯,你的意思是擴展webview類和覆蓋onSizeChanged事件?我可以嘗試一下。 – Peanut 2011-03-04 13:46:32

+0

感謝您的提示,它的工作原理,但返回的寬度和高度與以前相同......在兩個維度都過大。 – Peanut 2011-03-04 15:09:46

+0

嘿跟着你的解決方案,該應用程序正在爲所有設備工作,直到我的朋友在HTC野火測試,其中有240 * 320像素的顯示。 在他的設備上,webview的getWidth會返回正確的大小,而不是實際的1/3以上:(移除0.667f的倍數,並且webview在他的設備上看起來一如既往。但是使用此設置會使其顯示更大在我的xperia x10或galaxy上..你有沒有找到正確的靈魂? – vivek 2011-05-25 10:45:48