2016-08-06 4 views
0

私はアンドロイドの開発者チュートリアル "Using Immersive Full-Screen Mode"に取り組んでいますこのコード行はJava(Android)でどのように評価されますか?

このコードスニペットが見つかるまで、すべては問題ありませんでした。

private void hideSystemUI() { 
    // Set the IMMERSIVE flag. 
    // Set the content to appear under the system bars so that the content 
    // doesn't resize when the system bars hide and show. 
    mDecorView.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); 
} 

私はこの条件が評価されるのか分からないので、私はsetSystemUiVisibility(int)方法で少し混乱しています。

なぜこのメソッドはいくつかの整数値を受け取りますか?

多分それはJava言語についての非常に基本的な概念ですが、以前はこれを使用したり、見たことがありませんでした。

+1

これらの値はすべてOR演算され、その後、単一の整数として 'setSystemUiVisibility'に渡されます。 – markspace

答えて

4

setSystemUiVisibilityは実際に1の整数を受信して​​います。あなたが見ているのは、ビットフラグです。これらのすべてのViewは、bitwiseまたはを使って結合されます。オンまたはオフ、1または0ことを表す一般的な方法は、値truefalseを有するbooleanである:

考えフラグがトグルを表すことです。しかし、booleanは(単純化のために)4バイトを要し、これは32ビットである。さて、このbooleanは実際には32個の異なるフラグを表すために使用され、32個の場所が1または0になりました!整数(サイズ4バイト)と同じです。それで、整数を使ってたくさんのフラグを保持し、最初はすべて0に設定します。

我々は次に( | 1バールではなく、注2)ビット単位のOR演算子を使用するようなので、「真」に設定するフラグビットを指定することができ

00000000 | 00100000 = 00100000 
00100000 | 00000001 = 00100001 

秒数が表示されているフラグ私たちは真実として設定したい。今、あなたの変数は、(documentationから)の値を持っている:あなたは0000 1111 0000 0110を取得し、あなたはビット単位で一緒にそれらすべてを組み合わせると

View.SYSTEM_UI_FLAG_LAYOUT_STABLE   = 0x0100 = 0000 0001 0000 0000 
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION = 0x0200 = 0000 0010 0000 0000 
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN  = 0x0400 = 0000 0100 0000 0000 
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION  = 0x0002 = 0000 0000 0000 0010 
View.SYSTEM_UI_FLAG_FULLSCREEN    = 0x0004 = 0000 0000 0000 0100 
View.SYSTEM_UI_FLAG_IMMERSIVE    = 0x0800 = 0000 1000 0000 0000 

または= 0x0F06 = 3846.

注:私は、32ビットを表すありませんよシンプルさと可読性のためです。私が書いたバイナリの数字はすべて0になるはずです。その場合は混乱していた。

関連する問題