안드로이드가 시스템 다운을 차단하는 방법 메뉴 표시줄 보이기
원리 분석: 높이와 상태막대만큼 투명한 크기의 레이아웃을 만듭니다
1단계: 상태막대 높이 가져오기
private int getHeight(Context context) {
int identifier = context.getResources().getIdentifier("status_bar_height", "dimen", "android");// ID
return identifier > 0 ? context.getResources().getDimensionPixelSize(identifier) : 0;// ID
}
:
mLayoutParams = new WindowManager.LayoutParams();
mLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
mLayoutParams.gravity = Gravity.TOP;//
mLayoutParams.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_NOT_TOUCH_MODAL |FLAG_NOT_FOCUSABLE;
mLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;//
mLayoutParams.height = getHeight(this);//
mLayoutParams.format = PixelFormat.TRANSPARENT;//
: :
if (Build.VERSION.SDK_INT >= 23) {
if (Settings.canDrawOverlays(this)) {// 。API 23
((WindowManager) getApplicationContext().getSystemService("window")).addView(new View(this), mLayoutParams);
} else {
startActivityForResult(new Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION",
Uri.parse("package:" + getPackageName())), 200);
}
} else {
((WindowManager) getApplicationContext().getSystemService("window")).addView(new View(this), mLayoutParams);
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
protected void onActivityResult(int i, int i2, Intent intent) {
if (i != 200) {
return;
}
if (Settings.canDrawOverlays(this)) {
((WindowManager) getApplicationContext().getSystemService("window")).addView(new View(this), mLayoutParams);
return;
}
}
:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.