web-dev-qa-db-ja.com

ステータスバーにのみFLAG_LAYOUT_NO_LIMITSを設定できますか?

透明なステータスバーを作成する必要があります。私はgetWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)を使用しており、それは私が望むようにステータスバーを作ります。ただし、ナビゲーションバーにも影響します。透明になり、getWindow().setNavigationBarColor(Color.BLACK)は何もしません。

ナビゲーションバーではなく透明なステータスバーのみを作成する方法はありますか?

43
BArtWell

私のためのこの仕事

getWindow().setFlags(
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
)

styles.xml

<style name="TranslucentStatusBar" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="Android:windowTranslucentStatus">true</item>
</style>

v21\styles.xml

<style name="TranslucentStatusBar" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="Android:windowDrawsSystemBarBackgrounds">false</item>
    <item name="Android:windowTranslucentStatus">true</item>
</style>

ステータスバーは透明または半透明になります。ナビゲーションバーは表示されません

お役に立てれば!

22
Chorld
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
10
ScuAdam

mikepenzのコメント を使用して

ここで以下のコード(kotlinに変換)を正確に処理します。

// at AppCompatActivity, min SDK is 16, I tested api 25
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) {
        window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
    }
    if (Build.VERSION.SDK_INT >= 19) {
        window.decorView.systemUiVisibility =
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    }
    if (Build.VERSION.SDK_INT >= 21) {
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
        window.statusBarColor = Color.TRANSPARENT
    }

    setContentView(R.layout.activity_main)
}
10
mgcation

下にスクロールして、最終結果がどのように見えるかを確認します

まず、styles.xmlを次のように定義します。

styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
</style>

DO NOT次の行を追加します

<item name="Android:windowTranslucentStatus">true</item>

EditTextを含むダイアログにソフトキーボードが表示されている場合、上記の行を追加してもレイアウトは上にシフトしません。

次に、v21andv23スタイルでこのスタイルをオーバーライドします

v21/styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
     <item name="Android:windowDrawsSystemBarBackgrounds">false</item>
</style>

v23/styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
     <item name="Android:windowDrawsSystemBarBackgrounds">false</item>
</style>

アクティビティコード-​​Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    window.setFlags(
            LayoutParams.FLAG_LAYOUT_NO_LIMITS,
            LayoutParams.FLAG_LAYOUT_NO_LIMITS
    )
    setContentView(R.layout.YOUR_LAYOUT_RESOURCE_ID)
    .
    .
.
}

アクティビティコード-​​Java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setFlags(
            LayoutParams.FLAG_LAYOUT_NO_LIMITS,
            LayoutParams.FLAG_LAYOUT_NO_LIMITS
    )
    setContentView(R.layout.YOUR_LAYOUT_RESOURCE_ID)
    .
    .
    .
}

最終結果 - End result

7
Rajkiran
fun showTransparentStatusbar() {
        activity!!.window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN)
    }


    fun removeStatusbarFlags() {
        activity!!.window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
    }
4
nawaab saab

このように使用して、ステータスバーとナビゲーションバーを非表示にできます。

WindowManager.LayoutParams attributes = getWindow().getAttributes();
    attributes.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
    getWindow().setAttributes(attributes);

ナビゲーションバーを再度表示するには、これを使用します

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KitKat) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

    }

色は私にとって灰色です、多分あなたはあなたの原色にそれを強制することができます

3
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

上記のフラグだけが機能しました。ナビゲーションボタンは表示され、ステータスバーとアクションバーは非表示になります。

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

動かない。テストデバイスネクサス5。

2
Eugene P.

私は解決策を見つけました

<style name="transparent" parent="Theme.AppCompat.Light.NoActionBar">//AppCompat is the key; You can choose any other theme than the light-theme, but stick to AppCompat
    <item name="Android:windowTranslucentStatus">false</item>
    <item name="Android:windowDrawsSystemBarBackgrounds">false</item>
    //Other styling(optional)
</style>

この透明なテーマをアクティビティマニフェストに次のように適用します

 <activity
      ...
      Android:theme="@style/transparent"/>
1
Robokishan
getWindow().setFlags(
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
)

<style name="TranslucentStatusBar" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="Android:windowTranslucentStatus">true</item>
</style>
0
CHirag RAmi

はい、Style.xmlでこのコードを使用できます

<style name="transparent" parent="Theme.AppCompat.Light">//AppCompat is the key; You can choose any other theme than the light-theme, but stick to AppCompat

    <item name="colorPrimaryDark">#00000000</item>//THIS is the important part.
    //Other styling(optional)
</style>

次に、レイアウトに適用するには、ルートレイアウト(ビュー)に次の行を追加します。

Android:theme="@style/transparent"
0
Idrish Multani