2011-11-25 3 views
21

태블릿에서 상태 표시 줄을 숨기거나 표시 할 수있는 버튼을 만들려고합니다.Android : 상태 표시 줄/전원 표시 줄 표시/숨기기

전에서 onCreate에 넣어 한

getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); 

및 버튼 쇼에

:

WindowManager.LayoutParams attrs = getWindow().getAttributes(); 
attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN; 
getWindow().setAttributes(attrs); 

숨기기 :

WindowManager.LayoutParams attrs = getWindow().getAttributes(); 
attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; 
getWindow().setAttributes(attrs); 

어떤 힌트/계약 및 프로모션 추천 자료 비즈니스 디렉토리 리뷰는?

// 내가 여기에이 힌트를 검토 한

편집 : http://android.serverbox.ch/?p=306 이처럼 내 코드를 변경 : 내 버튼을 클릭하면 그래서 방법이 내가 할 수라고

private void hideStatusBar() throws IOException, InterruptedException { 
    Process proc = Runtime.getRuntime().exec(new String[]{"su","-c","service call activity 79 s16 com.android.systemui"}); 
    proc.waitFor(); 
} 

private void showStatusBar() throws IOException, InterruptedException { 
    Process proc = Runtime.getRuntime().exec(new String[]{"am","startservice","-n","com.android.systemui/.SystemUIService"}); 
    proc.waitFor(); 
} 

을 앱이 몇 초를 기다리고 있기 때문에 어떤 일이 일어나고 있는지 확인하십시오. 나는 또한 LockCat을 조사하여 어떤 일이 일어나고 있음을 확인했다.

쇼 : http://pastebin.com/CidTRSTi 숨기기 : http://pastebin.com/iPS6Kgbp

+0

예 http://stackoverflow.com/a/35886019/4395114 –

답변

78

매니페스트에 설정된 전체 화면 테마를 가지고 있습니까?

android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 

나는이 기능을 사용하지 않으면 전체 화면으로 이동할 수 없을 것이라고 생각합니다. 여기

나를 위해 일한 솔루션입니다 FLAG_FULLSCREEN이 작동하지 않을 수 있습니다 취소하여 상태 표시 줄을 표시, 어떤 사람

// Hide status bar 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
// Show status bar 
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
+0

아니, 난 매니페스트에 추가하지 않았습니다.하지만 시도 할 때 오류가 발생합니다. 오류 : 지정된 이름 ('theme'값 '@android : style/ Theme.Dark.NoTitleBar.Fullscreen')과 일치하는 리소스가 없습니다. " – B770

+1

@ B770 : 저기 있습니다. 'Theme.Dark.NoTitleBar.Fullscreen'라는 이름은 없지만'Theme.NoTitleBar.Fullscreen'이라는 이름이 있습니다 만, 화면이 안되는 HOME 및 BACK 버튼이없는 Android 3.0 이상의 장치에서는 시스템 표시 줄을 제거 할 수 없습니다. – CommonsWare

+0

@CommonWare : 내가 찾은이 : http://forum.xda-developers.com/showthread.php?t=1265397 여기에 상태 표시 줄을 숨기고 표시 할 수 있습니다. "Overcome"ROM을 설치했습니다. 이 funktion이 포함되어 있으며 작동합니다. 그래서 다른 버튼에이 funktion을 넣는 것도 가능합니다 ... – B770

25

:

는 내가 추가하고 전체 화면 플래그를 제거하려면 다음을 사용합니다 (Documentation) (Flag Reference)

숨기기 상태 표시 줄

// Hide Status Bar 
if (Build.VERSION.SDK_INT < 16) { 
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        WindowManager.LayoutParams.FLAG_FULLSCREEN); 
} 
else { 
    View decorView = getWindow().getDecorView(); 
    // Hide Status Bar. 
    int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; 
    decorView.setSystemUiVisibility(uiOptions); 
} 

상태 표시 줄

if (Build.VERSION.SDK_INT < 16) { 
       getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    } 
    else { 
     View decorView = getWindow().getDecorView(); 
     // Show Status Bar. 
     int uiOptions = View.SYSTEM_UI_FLAG_VISIBLE; 
     decorView.setSystemUiVisibility(uiOptions); 
    } 
-2

참조 - 킷캣에 도입 된 기능의 https://developer.android.com/training/system-ui/immersive.html

// This snippet shows the system bars. It does this by removing all the flags 
// except for the ones that make the content appear under the system bars. 
private void showSystemUI() { 
    mDecorView.setSystemUiVisibility(
      View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
      | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
      | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); 
} 
2

하나는 "몰입 모드"입니다. 몰입 형 모드에서는 사용자가 스 와이프를 사용하여 상태 표시 줄과 탐색 모음을 표시하거나 숨길 수 있습니다. 시도해 보려면 "몰입 형 모드 전환"버튼을 클릭 한 다음 바를 들락 거 려보십시오.

예 :

public void toggleHideyBar() { 

     int uiOptions = getActivity().getWindow().getDecorView().getSystemUiVisibility(); 
     int newUiOptions = uiOptions; 
     boolean isImmersiveModeEnabled = 
       ((uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == uiOptions); 
     if (isImmersiveModeEnabled) { 
      Log.i(TAG, "Turning immersive mode mode off. "); 
     } else { 
      Log.i(TAG, "Turning immersive mode mode on."); 
     } 

     // Navigation bar hiding: Backwards compatible to ICS. 
     if (Build.VERSION.SDK_INT >= 14) { 
      newUiOptions ^= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; 
     } 

     // Status bar hiding: Backwards compatible to Jellybean 
     if (Build.VERSION.SDK_INT >= 16) { 
      newUiOptions ^= View.SYSTEM_UI_FLAG_FULLSCREEN; 
     } 

     if (Build.VERSION.SDK_INT >= 18) { 
      newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; 
     } 

     getActivity().getWindow().getDecorView().setSystemUiVisibility(newUiOptions); 
     //END_INCLUDE (set_ui_flags) 
    }