Android 로 딩 대화 상자 기능 및 인 스 턴 스 코드 불 러 오기(몰입 식 효 과 를 종료 하지 않 음)
몰입 식 효과 에서 인터페이스 가 대화 상 자 를 팝 업 할 때 대화 상 자 는 초점 을 얻 습 니 다.이 로 인해 인터페이스 가 몰입 식 효 과 를 종료 합 니 다.그러면 차단 대화 상 자 를 통 해 초점 을 얻어 몰입 식 을 종료 하지 않 는 목적 을 달성 할 수 있 습 니까?한다 면 한다.우선 개선 후의 효과 도 를 살 펴 보 자.
일반 대화 상자 팝 업 효과
Loading Dialog 팝 업 효과
사용자 정의 LoadingDialog
public class LoadingDialog extends Dialog {
public LoadingDialog(Context context) {
super(context);
}
public LoadingDialog(Context context, int theme) {
super(context, theme);
}
@Override
public void show() {
// show
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
super.show();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_FULLSCREEN;
this.getWindow().getDecorView().setSystemUiVisibility(uiOptions);
}
// show , dialog
this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
}
}
위 를 통 해 알 수 있 듯 이 쇼 전에 window 의 FLAG 를 추 가 했 습 니 다.NOT_FOCUSABLE 속성,window 에서 초점 을 얻 지 못 하 게 합 니 다.show 이후 에 추 가 된 FLAG 를 제거 합 니 다.NOT_FOCUSABLE 속성 으로 필요 한 효 과 를 실현 합 니 다.2.Window Manager 의 addView 방법 을 통 해 이 루어 집 니 다.
private WindowManager mwWindowManager;
private FrameLayout mForewarnLayout;
private boolean isShowing = false;
/** */
public void alertLoadingDialog(){
if (!isShowing){
mForewarnLayout = (FrameLayout) LayoutInflater.from(getApplicationContext())
.inflate(R.layout.view_loading, null, false);
// window
mwWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
//
WindowManager.LayoutParams forewarnLayoutParams = new WindowManager.LayoutParams();
forewarnLayoutParams.type = WindowManager.LayoutParams.TYPE_PHONE; // window TYPE
forewarnLayoutParams.format = PixelFormat.RGBA_8888; // ,
// Window flag
forewarnLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
forewarnLayoutParams.gravity = Gravity.LEFT | Gravity.TOP; //
// ,
//
forewarnLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
forewarnLayoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
// forewarnLayoutParams.windowAnimations = R.style.anim_view;//
//
mwWindowManager.addView(mForewarnLayout, forewarnLayoutParams);
isShowing = true;
}
}
/** */
public void dismissTwo() {
if (isShowing) {
mwWindowManager.removeViewImmediate(mForewarnLayout);
isShowing = false;
}
}
addView 팝 업 효과
원 리 는 할 말 이 없고 직접 사용 하면 끝 입 니 다.주의해 야 할 것 은 addView 와 removeView 가 일일이 대응 해 야 한 다 는 것 입 니 다.상기 코드 는 이미 판단 처 리 를 했 습 니 다.권한 을 추가 해 야 합 니 다.그렇지 않 으 면 잘못 보고 할 수 있 습 니 다.
uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
여기 서 말씀 드 리 겠 습 니 다removeView
와removeViewImmediate
의 차 이 는 두 가지 방법 으로 스 레 드 동기 화 문 제 를 설계 하 였 습 니 다.removeView Immediate()는 View 에 게 즉시 View 를 호출 하 라 고 알 리 는 것 입 니 다.onDetachWindow()는 이 방법 이 감청 이나 관찰자 로 이 루어 진 것 임 을 설명 합 니 다.스 레 드 의 동기 화 와 비동기 문제 로 인해 activity 가 소각 되 었 으 나 view 는 아직 remove 되 지 않 았 습 니 다.창문 이 새 어 나 갈 수 있 습 니 다.총결산
위 에서 말 한 것 은 소 편 이 소개 한 안 드 로 이 드 로 딩 대화 상자 의 기능 과 인 스 턴 스 코드 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.