透明なステータスバーを作成する必要があります。私はgetWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
を使用しており、それは私が望むようにステータスバーを作ります。ただし、ナビゲーションバーにも影響します。透明になり、getWindow().setNavigationBarColor(Color.BLACK)
は何もしません。
ナビゲーションバーではなく透明なステータスバーのみを作成する方法はありますか?
私のためのこの仕事
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>
ステータスバーは透明または半透明になります。ナビゲーションバーは表示されません
お役に立てれば!
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
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)
}
下にスクロールして、最終結果がどのように見えるかを確認します
まず、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)
.
.
.
}
fun showTransparentStatusbar() {
activity!!.window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN)
}
fun removeStatusbarFlags() {
activity!!.window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
}
このように使用して、ステータスバーとナビゲーションバーを非表示にできます。
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);
}
色は私にとって灰色です、多分あなたはあなたの原色にそれを強制することができます
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
上記のフラグだけが機能しました。ナビゲーションボタンは表示され、ステータスバーとアクションバーは非表示になります。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
動かない。テストデバイスネクサス5。
私は解決策を見つけました
<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"/>
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>
はい、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"