2010-05-07 4 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'가 반환되는지 당신이 알고 있다고 생각하지 않습니까? – Casebash

+1

안녕하세요 Casidiablo, 코드에 문제가 있습니다. 이는 사용자 정의 생성자에서 사용하는 컨텍스트가 활동 인 방식으로 자신의 코드로 작성한보기에서만 가능합니다. ListAdapter에서 Item의 getContext 메서드를 시도했지만이 경우 Activity가 아닌 Context를 얻습니다. Activity는 Context의 하위 클래스입니다. 즉, Activity에 캐스팅 될 수없는 Context 객체를 얻을 수 있습니다. 내 테스트 코드가 ClassCastException에서 종료되었습니다. – Janusz

+76

오해의 소지가있는 답변. 모든보기가 활동에서 사용되는 것은 아닙니다! 일부보기는 PopupMenu 또는 Dialog 또는 AppWidgetProvider에 있습니다. 캐스트 예외 또는 잘못된 창을 가져옵니다. 대화 상자에는 고유 한 창이 있습니다. 답을 수정하십시오. –

관련 문제