2014-01-15 9 views
19

私はIMMERSIVEモードに入り、起動直後にトップとbuttomのシステムバーを非表示にしたいと考えています。android kitkatで新しいIMMERSIVEモードを使用する

アンドロイドの開発者サイトでは、私はsetSystemUiVisibility()を使用し、SYSTEM_UI_FLAG_IMMERSIVESYSTEM_UI_FLAG_HIDE_NAVIGATIONを提供すると言います。

OnCreate()の方法でこれを行うにはどうすればよいですか?私はsetSystemUiVisibilityがアクティビティクラスで提供されていないと思うし、それはビューで発生する必要があります。回避策はありますか? doorstuckする

UPDATE

OKよると、私は次の行を追加しましたが、私はすべての変更、ナビゲーションバーや湖底のボタンを参照してくださいいけない、まだ表示されている:

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (savedInstanceState == null) { 
     } 
     getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 
     getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE); 
    } 

    //Rest of activity code 

答えて

41

は装飾ビューを取得します。

getWindow().getDecorView().setSystemUiVisibility(...) 

引数はビットフラグであることに注意してください。のみ上記一度メソッドを呼び出します。

getWindow().getDecorView().setSystemUiVisibility(
      View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
     | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
     | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
     | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
     | View.SYSTEM_UI_FLAG_FULLSCREEN 
     | View.SYSTEM_UI_FLAG_IMMERSIVE); 
+0

ありがとうございますが、これを実装する方法の例がありますか?質問への私の更新を見てください。 –

+0

私の回答は例で編集されています@ Sean87 – doorstuck

+3

このフラグをAndroidスタイルからすべて設定することができますので、アクティビティから呼び出す必要はありませんか?だから私はAndroidからさまざまなバージョンの異なるスタイルを設定できますか? – Cilenco

5

クリスBanesの要旨は、我々がhttps://gist.github.com/chrisbanes/73de18faffca571f7292をロリポップするハニカムからすべてのバージョンの没入モードを設定するために使用できる素敵なヘルパークラスを示しています。

更新: 私はgithubリポジトリからプロジェクトに追加しようとしましたが、プロジェクトに要点ファイルをクローンして、パッケージ名を付ける必要がありました。依存関係として適切に組み込む方法を知っている人は、私を助けてくれることを歓迎します。

私は、私はこのようImmersiveStickyModeを使用したい私のFullScreenActivityにこれを追加しました:

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 

     final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
       | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
       | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
       | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
       | View.SYSTEM_UI_FLAG_FULLSCREEN 
       | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; 

     SystemUiHelper uiHelper = new SystemUiHelper(this, SystemUiHelper.LEVEL_IMMERSIVE ,flags); 
     uiHelper.hide(); 



} 
+0

このヘルパークラスの使い方に関する詳細を追加できますか? – abarisone

+2

@swisscoder私はGradle依存関係としてこれを使用できるようにするgithubプロジェクトを作成しました:https://github.com/intrications/SystemUiHelper – Intrications

0

回答がすでに与えられているが、ここでは、没入型モードを利用する方法です。あなたの活動で

直前setContentview().......

呼び出し方法:toggleHideyBar();

Developer Androidの文書documentationに従って、あなたのアクティビティでこのメソッドをコピーしてください。

1

William J. Francisに非常に良く、クレジット:

public class GameActivity extends Activity{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     /* my code you dont need this 
     assets=getAssets(); 
     sGame= new GameView(this, GAME_WIDTH, GAME_HEIGHT); 
     setContentView(sGame); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
     */ 


     getWindow().getDecorView().setSystemUiVisibility(
       View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
       | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
       | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
       | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar 
       | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar 
       | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); 
    } 

@Override   
protected void onDoSomethingOtherImportantThing(){ 
... 
} 



} 
2

あなたが好きな没入モードに行くためにグローバル関数を作成することができます

public static void enableImmersiveMode(final View decorView) { 
     decorView.setSystemUiVisibility(setSystemUiVisibility()); 
     decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() { 
      @Override 
      public void onSystemUiVisibilityChange(int visibility) { 
       if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { 
        decorView.setSystemUiVisibility(setSystemUiVisibility()); 
       } 
      } 
     }); 
    } 


public static int setSystemUiVisibility() { 
     return View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
       | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
       | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
       | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
       | View.SYSTEM_UI_FLAG_FULLSCREEN 
       | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; 
} 

コードの上には、システムUIの可視性の変更を制御します。これがあなたを助けることを願っています。

関連する問題