我有以下XML:Android webview佈局 - 何時設置位置?
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/rl"
android:background="@color/red"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview"
android:layout_width="10dp"
android:layout_height="10dp" />
</RelativeLayout>
當我打電話:
view.layout(50, 50, 1024 - 50, 600 - 50);
從的onCreate()和在onStart(),它沒有任何效果。但是,當我將相同的調用添加到shouldOverrideKeyEvent()並按下一個鍵時,它可以工作。我想這是因爲我的設置正在被XML的設置覆蓋。所以,問題是:我應該在什麼時候儘快調用layout(),但在android:layout_width =「10dp」和android:layout_height =「10dp」之後已經應用了。
UPDATE
我用blessenm的解決方案。
private class LayoutListener implements OnGlobalLayoutListener
{
public void onGlobalLayout()
{
Display display = getWindowManager().getDefaultDisplay();
int screenWidth = display.getWidth();
int screenHeight = display.getHeight();
// Workaround for a 'fill_parent' bug on my tablet (Kindle Fire).
_WebView.layout(0, 0, screenWidth, screenHeight);
_WebView.loadUrl("http://192.168.1.2");
//_Layout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}
如果我評論removeGlobalOnLayoutListener()出,它停止工作。調試器顯示它被調用兩次,所以我想第二次調用實際上只是設置了大小。所以,我決定不刪除這個監聽器(如果它被稱爲2次,那不是性能殺手)。它似乎沒問題,直到我意識到這是每當我點擊一個永久的底部條形圖時,就會引起工具條的出現。由於我在設置佈局之後加載了一個網站,因此每次都會重新加載。我只有在視圖的大小正確時才加載站點,因爲服務器發送的內容是針對給定大小進行了特別優化的。
這就是爲什麼我不能離開聽衆,應該刪除它。但當?數到2?它可以在任何設備/ Android版本上運行嗎?爲什麼它在第二個電話中工作,但不是第一個電話?
問候,
謝謝。看起來你的代碼中有2個錯誤。 1.(明顯的一個)監聽器是接口,而不是類,你必須實現onGlobalLayout(),而不是覆蓋它。註釋是不需要的。 2.我不知道爲什麼,但onGlobalLayout()的一個調用是不夠的。如果刪除實例,它將停止工作。我會試着找出它被調用的頻率來決定,我應該刪除它。 (如果我應該那麼,也許,當左/上/右/底已經是我想要的,而不是立即)。 – noober 2012-04-22 11:41:40
無論如何,它的工作,所以再次感謝你。 – noober 2012-04-22 11:44:50
它只被調用兩次。我認爲離開聽衆是可以的。 – noober 2012-04-22 12:00:55