2010-05-07 47 views

回答

16

那麼......因爲所有視圖都有創建它們的活動的參考(Context),所以您可以使用該Context來獲取窗口的參考。讓我告訴你這個例子中,我寫了一些分鐘前:

// main activity 
import android.app.Activity; 
import android.os.Bundle; 
public class GetWindow extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     MyView view = new MyView(this); 
     view.changeSomethingInWindow(); // keep an eye on this method 
     setContentView(view); 
    } 
} 

然後,你的觀點裏,你可以這樣做:

// your view :D 
import android.app.Activity; 
import android.content.Context; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 

public class MyView extends View{ 
    public MyView(Context context) { 
     super(context); 
    } 

    public void changeSomethingInWindow(){ 
     // get a reference of the activity 
     Activity parent = (Activity)getContext(); 
     // using the activity, get Window reference 
     Window window = parent.getWindow(); 
     // using the reference of the window, do whatever you want :D 
     window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    } 
} 

在這種情況下,我改變窗口顯示全屏模式。希望這對你有所幫助。告訴我你是否遇到麻煩。

+2

謝謝你的回答。使用getWindow並將其轉換爲活動是一個好主意。我不認爲你知道爲什麼一個'IBinder'被返回而不是'Window'? – Casebash 2010-05-12 06:45:17

+1

你好Casidiablo,你的代碼存在問題。這僅適用於您在自己的代碼中創建的視圖,以便您在自定義構造函數中使用的上下文是活動。我嘗試了ListAdapter中的Item的getContext方法,在這種情況下,我得到的Context不是Activity。 Activity是Context中的一個子類,這意味着你可以獲得一個無法轉換成Activity的Context對象。我的測試代碼以ClassCastException結束。 – Janusz 2010-05-12 08:01:32

+76

誤導性答案。並非所有視圖都在Activity中使用!一些視圖位於PopupMenu,或對話框或AppWidgetProvider中。你會得到強制異常,或者錯誤的Window。 Dialog有它自己的窗口。修改你的答案。 – 2012-03-15 14:44:24