안드로이드가 시스템 다운을 차단하는 방법 메뉴 표시줄 보이기

2572 단어
선언: 일상적으로 안드로이드 앱을 개발하는 과정에서 이런 수요를 만난 적이 있습니까? 시스템의 하락 메뉴 표시줄을 비활성화하고 다음은 이 수요를 실현합니다.
원리 분석: 높이와 상태막대만큼 투명한 크기의 레이아웃을 만듭니다
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;
        }
    }




좋은 웹페이지 즐겨찾기