27
Window
을 임의로 포함하는 참조를 얻을 수있는 방법을 찾을 수 없습니다. getWindowToken을 찾았지만 사용법을 알 수 없습니까? 아무도 어떻게 알 수 있습니까?안드로이드에서보기를 포함하는 창 찾기
또한 누구나 Window
대신 IBinder
을 반환하는 이유를 알고 있습니까?
Window
을 임의로 포함하는 참조를 얻을 수있는 방법을 찾을 수 없습니다. getWindowToken을 찾았지만 사용법을 알 수 없습니까? 아무도 어떻게 알 수 있습니까?안드로이드에서보기를 포함하는 창 찾기
또한 누구나 Window
대신 IBinder
을 반환하는 이유를 알고 있습니까?
음 ... 모든보기에 해당 활동을 참조한 (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'가 반환되는지 당신이 알고 있다고 생각하지 않습니까? – Casebash
안녕하세요 Casidiablo, 코드에 문제가 있습니다. 이는 사용자 정의 생성자에서 사용하는 컨텍스트가 활동 인 방식으로 자신의 코드로 작성한보기에서만 가능합니다. ListAdapter에서 Item의 getContext 메서드를 시도했지만이 경우 Activity가 아닌 Context를 얻습니다. Activity는 Context의 하위 클래스입니다. 즉, Activity에 캐스팅 될 수없는 Context 객체를 얻을 수 있습니다. 내 테스트 코드가 ClassCastException에서 종료되었습니다. – Janusz
오해의 소지가있는 답변. 모든보기가 활동에서 사용되는 것은 아닙니다! 일부보기는 PopupMenu 또는 Dialog 또는 AppWidgetProvider에 있습니다. 캐스트 예외 또는 잘못된 창을 가져옵니다. 대화 상자에는 고유 한 창이 있습니다. 답을 수정하십시오. –