Notice
Recent Posts
Recent Comments
Link
투케이2K
903. (Android/Java) [간단 소스] windowManager addView 윈도우 매니저 사용해 뷰 전체 화면 추가 방법 본문
Android
903. (Android/Java) [간단 소스] windowManager addView 윈도우 매니저 사용해 뷰 전체 화면 추가 방법
투케이2K 2024. 11. 20. 19:48[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Java / Kotlin
[소스 코드]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Java
- 개발 툴 : Android Studio
- 구분 : 간단 소스
- 사전 설정 필요 :
>> windowManager addView 를 사용해 새로운 뷰를 추가하기 위해서는 Settings.canDrawOverlays 권한 부여 체크 필요
>> Settings.canDrawOverlays 권한이 부여 되지 않은 경우 ACTION_MANAGE_OVERLAY_PERMISSION 권한 부여 필요
: ex - Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------
// [사전 API 레벨 체크 및 퍼미션 권한 부여]
if (Build.VERSION.SDK_INT >= 23) {
if (!Settings.canDrawOverlays(A_Webview.this)) { // [앱 위에 표시 : 권한이 부여 되지 않음]
S_Log._E_("WebChromeClient :: Permission Not Grant", null);
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
return;
}
}
// [비디오 태그 재생 화면 전체 화면 전환] : [mCustomView 뷰 할당]
View mCustomView = view;
mCustomView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); // [시스템 UI 표시 설정]
// [WindowManager 생성 뷰 최상단 표시 설정]
try {
WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
int LAYOUT_FLAG;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_PHONE;
}
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT, // 프레임 최대 크기
WindowManager.LayoutParams.MATCH_PARENT, // 프레임 최대 크기
LAYOUT_FLAG, // API 레벨에 따라 TYPE_SYSTEM_ALERT 등을 사용 필요
//WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, // 터치 불가능 / 윈도우가 포커스를 가져오지 않도록 설정
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, // 터치 가능 / 윈도우가 포커스를 가져오지 않도록 설정
PixelFormat.TRANSLUCENT);
// [윈도우 초기 위치 설정]
params.gravity = Gravity.START | Gravity.TOP;
params.x = 0;
params.y = 100;
// [윈도우 뷰 추가]
windowManager.addView(mCustomView, params);
}
catch (Exception e){
e.printStackTrace();
}
// --------------------------------------------------------------------------------------
반응형
'Android' 카테고리의 다른 글
Comments