如何在一个 activity 中隐藏 android 中的状态栏
How to hide status bar in android in just one activity
我想在我正在使用的启动画面中隐藏状态栏/通知栏
风格:<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
这个不隐藏状态栏,我该怎么办?
如果你想删除状态栏然后在 onCreateView 方法中的 setContentView(layout) 之前使用这个
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
credits
要使您的 activity 全屏显示,请在 onCreate
中的 setContentView
之前添加此代码:
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
试试这个:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
使用下面的代码来解决你的问题。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Add Below line to hide
getSupportActionBar().hide();
}
尝试使用此完整解决方案向后 android 版本 16 和向前兼容的解决方案
if (Build.VERSION.SDK_INT < 16)
{
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
else
{
View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
}
我做了一些神奇的代码。可以单击状态栏中的按钮,但很难。 4.4 的部分无法正常工作。
/** Скрывает статус-бар */
private void hideStatusBar(View decorView)
{
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
android.app.ActionBar actionBar = getActionBar();
if (actionBar != null)
actionBar.hide();
}
@Override protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
try
{
// for < 4.0
if (Build.VERSION.SDK_INT < 16)
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
// for > 4.0
else
{
final View decorView = getWindow().getDecorView();
hideStatusBar(decorView);
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener()
{
@Override public void onSystemUiVisibilityChange(int visibility)
{
if (visibility != View.SYSTEM_UI_FLAG_FULLSCREEN)
hideStatusBar(decorView);
}
});
}
}
catch (Throwable t)
{
Util.log("Ошибка при попытке свернуть статус бар");
t.printStackTrace();
}
setContentView(R.layout.activity_main);
}
您可以像下面这样为您的特定 activity -
适当设置主题
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/launch_theme</item>
<item name="android:windowTranslucentNavigation">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
</style>
这是我用过的,效果很好。
将此代码添加到您的 activity onCreate
之前 setContentView
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
对于 Kotlin 用户。
在styles.xml
中添加新样式:
<style name="NoActionBarTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
现在在 AndroidManifest.xml
添加新创建的样式:
<activity
android:name=".MainActivity"
android:theme="@style/NoActionBarTheme"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize"
>...</activity>
最后在 MainActivity.kt
中进行以下更改:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//Add below line to hide status bar
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN
}
现在状态栏应该消失了:
试试这个:
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowFullscreen">true</item>
</style>
如果您在主题应用中使用它
Theme.MaterialComponents.NoActionBar
改为
Theme.AppCompat.NoActionBar
并在activity中添加代码:
fun fullScreen(activity: Activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (activity.window.insetsController != null) {
val insetsController = activity.window.insetsController
if (insetsController != null) {
insetsController.hide(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars())
insetsController.systemBarsBehavior =
WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
}
}
} else {
activity.window.setFlags(
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
)
}
}
如果你想隐藏状态栏线和操作栏,你必须改变线在themes.xml
<style name="Theme.MyApp"
parent="Theme.MaterialComponents.DayNight.DarkActionBar">
到
<style name="Theme.MyApp"
parent="Theme.MaterialComponents.DayNight.NoActionBar">
和这个 activity class 你不想要状态栏行..
requestWindowFeature(Window.FEATURE_NO_TITLE)
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
请确保您必须在 onCreate() 方法中在此之上添加这些行。
setContentView(R.layout.activity_main)
我想在我正在使用的启动画面中隐藏状态栏/通知栏
风格:<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
这个不隐藏状态栏,我该怎么办?
如果你想删除状态栏然后在 onCreateView 方法中的 setContentView(layout) 之前使用这个
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
credits
要使您的 activity 全屏显示,请在 onCreate
中的 setContentView
之前添加此代码:
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
试试这个:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
使用下面的代码来解决你的问题。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Add Below line to hide
getSupportActionBar().hide();
}
尝试使用此完整解决方案向后 android 版本 16 和向前兼容的解决方案
if (Build.VERSION.SDK_INT < 16)
{
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
else
{
View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
}
我做了一些神奇的代码。可以单击状态栏中的按钮,但很难。 4.4 的部分无法正常工作。
/** Скрывает статус-бар */
private void hideStatusBar(View decorView)
{
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
android.app.ActionBar actionBar = getActionBar();
if (actionBar != null)
actionBar.hide();
}
@Override protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
try
{
// for < 4.0
if (Build.VERSION.SDK_INT < 16)
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
// for > 4.0
else
{
final View decorView = getWindow().getDecorView();
hideStatusBar(decorView);
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener()
{
@Override public void onSystemUiVisibilityChange(int visibility)
{
if (visibility != View.SYSTEM_UI_FLAG_FULLSCREEN)
hideStatusBar(decorView);
}
});
}
}
catch (Throwable t)
{
Util.log("Ошибка при попытке свернуть статус бар");
t.printStackTrace();
}
setContentView(R.layout.activity_main);
}
您可以像下面这样为您的特定 activity -
适当设置主题<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/launch_theme</item>
<item name="android:windowTranslucentNavigation">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
</style>
这是我用过的,效果很好。
将此代码添加到您的 activity onCreate
之前 setContentView
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
对于 Kotlin 用户。
在styles.xml
中添加新样式:
<style name="NoActionBarTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
现在在 AndroidManifest.xml
添加新创建的样式:
<activity
android:name=".MainActivity"
android:theme="@style/NoActionBarTheme"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize"
>...</activity>
最后在 MainActivity.kt
中进行以下更改:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//Add below line to hide status bar
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN
}
现在状态栏应该消失了:
试试这个:
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowFullscreen">true</item>
</style>
如果您在主题应用中使用它
Theme.MaterialComponents.NoActionBar
改为
Theme.AppCompat.NoActionBar
并在activity中添加代码:
fun fullScreen(activity: Activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (activity.window.insetsController != null) {
val insetsController = activity.window.insetsController
if (insetsController != null) {
insetsController.hide(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars())
insetsController.systemBarsBehavior =
WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
}
}
} else {
activity.window.setFlags(
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
)
}
}
如果你想隐藏状态栏线和操作栏,你必须改变线在themes.xml
<style name="Theme.MyApp"
parent="Theme.MaterialComponents.DayNight.DarkActionBar">
到
<style name="Theme.MyApp"
parent="Theme.MaterialComponents.DayNight.NoActionBar">
和这个 activity class 你不想要状态栏行..
requestWindowFeature(Window.FEATURE_NO_TITLE)
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
请确保您必须在 onCreate() 方法中在此之上添加这些行。
setContentView(R.layout.activity_main)