27
我找不到方法來獲取包含任意View
v的Window
v。我找到了getWindowToken,但我無法弄清楚如何使用它?有誰知道如何?在Android中查找包含視圖的窗口
此外,有沒有人知道它爲什麼會返回IBinder
而不是Window
?
我找不到方法來獲取包含任意View
v的Window
v。我找到了getWindowToken,但我無法弄清楚如何使用它?有誰知道如何?在Android中查找包含視圖的窗口
此外,有沒有人知道它爲什麼會返回IBinder
而不是Window
?
那麼......因爲所有視圖都有創建它們的活動的參考(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);
}
}
在這種情況下,我改變窗口顯示全屏模式。希望這對你有所幫助。告訴我你是否遇到麻煩。
謝謝你的回答。使用getWindow並將其轉換爲活動是一個好主意。我不認爲你知道爲什麼一個'IBinder'被返回而不是'Window'? – Casebash 2010-05-12 06:45:17
你好Casidiablo,你的代碼存在問題。這僅適用於您在自己的代碼中創建的視圖,以便您在自定義構造函數中使用的上下文是活動。我嘗試了ListAdapter中的Item的getContext方法,在這種情況下,我得到的Context不是Activity。 Activity是Context中的一個子類,這意味着你可以獲得一個無法轉換成Activity的Context對象。我的測試代碼以ClassCastException結束。 – Janusz 2010-05-12 08:01:32
誤導性答案。並非所有視圖都在Activity中使用!一些視圖位於PopupMenu,或對話框或AppWidgetProvider中。你會得到強制異常,或者錯誤的Window。 Dialog有它自己的窗口。修改你的答案。 – 2012-03-15 14:44:24