如何在 Android 中隐藏状态栏

我推荐这个 链接。在这种情况下,如果用户点击编辑文本(例如:)在那个时候键盘将弹出,同时用户可以滚动查看所有剩余的视图(例如: 撰写,主题,发送按钮)在该屏幕上。同样,在我的应用程序中,我有一个活动,我有一些小部件或视图。 假设用户点击我活动中的 Edittext,然后键盘弹出,我可以滚动查看剩余的视图。但是如果我在清单中给出这个属性 android:theme="@android:style/Theme.NoTitleBar.Fullscreen"我无法滚动查看剩余的视图但是如果在清单中给出这样的属性 android:theme="@android:style/Theme.NoTitleBar"我可以滚动查看剩余的视图但是那个屏幕上有状态栏,这里我想要全屏即使键盘弹出我也可以滚动查看剩余的视图。.?我必须为此做出什么改变。.?

253207 次浏览

使用主题 "Theme.NoTitleBar.Fullscreen"和尝试设置 "android:windowSoftInputMode=adjustResize"的活动在 AndroidManifest.xml.你可以找到详细信息 给你

把这些写在你的活动中

@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);
}

检查这里的医生: https://developer.android.com/training/system-ui/status.html

你的应用程序将全屏显示。没有状态栏,没有标题栏。 :)

 if (Build.VERSION.SDK_INT < 16) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
} else {
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
ActionBar actionBar = getActionBar();
actionBar.hide();
}

manifest.xml文件中更改应用程序的主题。

android:theme="@android:style/Theme.Translucent.NoTitleBar"

如果你在一个活动中需要这个,你必须在 setContentView 之前输入 onCreate:

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);


setContentView(R.layout.your_screen);

用这个做你的 Activity

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

使用以下代码:

requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.youractivityxmlname);

我们不能阻止状态出现在全屏模式(4.4 +) kitkat 或以上的设备,所以尝试黑客阻止状态栏扩展。

解决方案是相当大的,所以这里是 SO 的链接:

StackOverflow: 在 android 4.4 + 中隐藏状态栏或使用全屏的 kitkat

此代码隐藏状态栏。

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

隐藏动作条写下这行:-

requestWindowFeature(Window.FEATURE_NO_TITLE);

这两行可以被编写到一起来隐藏操作栏和状态栏。所有这些行都必须在 onCreate方法中的 setContentView方法调用之前写入。

这是关于在 Android 4.0及以下版本和 Android 4.1及以上版本中隐藏状态栏的官方文档

请看一下:

Https://developer.android.com/training/system-ui/status.html

void hideStatusBar() {
if (Build.VERSION.SDK_INT < 16) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
} else {
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
}
}

可以使用此方法隐藏状态栏。这对于隐藏动作条也很重要。在这种情况下,如果您已经从支持库(如 Appcompat)扩展了活动,那么可以使用 GetSupportActionBar () . hide (),或者只需在上面提到的方法之后调用 GetActionBar () . hide ()。谢谢

将此添加到您的 Activity 类中

@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);
setContentView(R.layout.activity_main);
// some your code
}

这个解决方案对我很有效:)

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= 19) {
getWindow().setFlags(AccessibilityNodeInfoCompat.ACTION_NEXT_HTML_ELEMENT, AccessibilityNodeInfoCompat.ACTION_NEXT_HTML_ELEMENT);
getWindow().getDecorView().setSystemUiVisibility(3328);
}else{
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
}


DataBindingUtil.setContentView(this, R.layout.activity_hse_video_details);
public class MainActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// If the Android version is lower than Jellybean, use this call to hide
// the status bar.
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);
// Remember that you should never show the action bar if the
// status bar is hidden, so hide that too if necessary.
ActionBar actionBar = getActionBar();
actionBar.hide();
}


setContentView(R.layout.activity_main);


}
...
}

用于 Manifest

android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen"

在 res-> value-> styles.xml 下

风格身上贴标签

<item name="android:windowTranslucentStatus" tools:targetApi="kitkat">true</item>

在 AndroidManifest.xml-> 中您想要使用的活动中,添加以下内容:

android:theme="@style/Theme.AppCompat.Light.NoActionBar"
//this is for hiding action bar

在 MainActivity.java-> inside onCreate ()方法中,添加以下内容:

this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//this is for hiding status bar

您可以使用 styles.xml 进行隐藏

<resources>


<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="HiddenTitleTheme" parent="AppTheme">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
</style>

在你的货单上打这个电话,就像这个 android:theme="@style/HiddenTitleTheme"

你可以通过使用 Xml将状态栏的颜色设置为透明来隐藏状态栏。将 颜色项添加到你的活动主题:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:statusBarColor">@android:color/transparent</item>
</style>

使用此代码可以隐藏应用程序中的状态栏,并且易于使用

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);


setTheme(R.style.Theme_AppCompat_Light_NoActionBar);
requestWindowFeature(Window.FEATURE_NO_TITLE);


this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
, WindowManager.LayoutParams.FLAG_FULLSCREEN);


setContentView(R.layout.activity__splash_screen);
}

如果隐藏状态栏,请在 onCreate (for Activity)和 onCreateView/onViewCreated (for Fragment)中执行此操作

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

退出活动时不要忘记清除标志,否则在访问该活动后,整个应用程序将全屏显示。 在 onDestroy (用于活动)或 onDestroyView (用于片段)中清除此操作

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)

如果引用 谷歌文档,可以对 android 4.1及以上版本使用此方法,请在 setContentView ()之前调用此方法

public void hideStatusBar() {
View view = getWindow().getDecorView();
int uiOption = View.SYSTEM_UI_FLAG_FULLSCREEN;
view.setSystemUiVisibility(uiOption);
ActionBar actionBar = getActionBar();
if (actionBar != null) {
actionBar.hide();
}
}

由于 FLAG _ FULLSCREEN 不推荐使用 android R。您可以使用下面的代码来隐藏状态栏。

 @Suppress("DEPRECATION")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {


window.insetsController?.hide(WindowInsets.Type.statusBars())
} else {


window.setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
)
}

包括机器人 api 30这个对我很有用

if (Build.VERSION.SDK_INT < 16) {
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
} else if (Build.VERSION.SDK_INT < 30) {
window.decorView?.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN
actionBar?.hide()
} else {
window.decorView.windowInsetsController?.hide(WindowInsets.Type.statusBars())
}

这对我来说是最好的解决方案,只需要在 theme.xml 中写下这一行

<style name="MyApp" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
...
</style>

在 Style.xml 文件中添加或替换

<item name="android:statusBarColor">@android:color/transparent</item>

通过使用 setSystemUiVisiability () ,我们可以在 Android 4.1(API 级别16)或更高版本中隐藏状态栏

window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN

根据谷歌文档,我们不应该显示操作栏,如果 状态栏是隐藏的,所以如果需要也隐藏。

actionBar?.hide()

我知道我回答得太迟了。 为此,我在一个相对的 java 文件中使用了以下代码

Objects.requireNonNull(getSupportActionBar()).hide();

如果您正在使用更高的 API,那么您可能已经注意到了上述答案中提到的标志,即 FLAG_FULLSCREENSYSTEM_UI_FLAG_FULLSCREEN已被弃用。

为了覆盖整个屏幕,你可以定义一个自定义主题:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="ActivityTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowFullscreen">true</item>
</style>
</resources>

manifest中像 android:theme="@style/ActivityTheme"那样在 活动中添加主题,然后你就完成了。

注意 : 您还可以直接在清单中添加预定义的 @ android主题: android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen"。 在这种情况下,确保您的活动扩展 Activity()而不是 AppCompatActivity(),尽管它不是推荐的。

如果您正在使用 作曲,那么您可以导入

implementation "com.google.accompanist:accompanist-systemuicontroller:0.17.0"

然后在屏幕上写

val systemUiController = rememberSystemUiController()
systemUiController.isStatusBarVisible = false

我坚持的显示和隐藏系统 UI 的简洁和可伸缩的方法,适用于不同的 Android Api 级别:

object SystemBarsCompat {
private val api: Api =
when {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> Api31()
Build.VERSION.SDK_INT == Build.VERSION_CODES.R -> Api30()
else -> Api()
}


fun hideSystemBars(window: Window, view: View, isImmersiveStickyMode: Boolean = false) =
api.hideSystemBars(window, view, isImmersiveStickyMode)


fun showSystemBars(window: Window, view: View) = api.showSystemBars(window, view)


fun areSystemBarsHidden(view: View): Boolean = api.areSystemBarsHidden(view)


@Suppress("DEPRECATION")
private open class Api {
open fun hideSystemBars(window: Window, view: View, isImmersiveStickyMode: Boolean = false) {
val flags = View.SYSTEM_UI_FLAG_FULLSCREEN or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION


view.systemUiVisibility = if (isImmersiveStickyMode) {
flags or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
} else {
flags or
View.SYSTEM_UI_FLAG_IMMERSIVE or
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
}
}


open fun showSystemBars(window: Window, view: View) {
view.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
}


open fun areSystemBarsHidden(view: View) = view.systemUiVisibility and View.SYSTEM_UI_FLAG_HIDE_NAVIGATION != 0
}


@Suppress("DEPRECATION")
@RequiresApi(Build.VERSION_CODES.R)
private open class Api30 : Api() {


open val defaultSystemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_SWIPE


override fun hideSystemBars(window: Window, view: View, isImmersiveStickyMode: Boolean) {
window.setDecorFitsSystemWindows(false)
view.windowInsetsController?.let {
it.systemBarsBehavior =
if (isImmersiveStickyMode) WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
else defaultSystemBarsBehavior
it.hide(WindowInsets.Type.systemBars())
}
}


override fun showSystemBars(window: Window, view: View) {
window.setDecorFitsSystemWindows(false)
view.windowInsetsController?.show(WindowInsets.Type.systemBars())
}


override fun areSystemBarsHidden(view: View) = !view.rootWindowInsets.isVisible(WindowInsets.Type.navigationBars())
}


@RequiresApi(Build.VERSION_CODES.S)
private class Api31 : Api30() {
override val defaultSystemBarsBehavior = WindowInsetsController.BEHAVIOR_DEFAULT
}
}

例如,为了隐藏系统条,可以从 Fragment调用它:

SystemBarsCompat.hideSystemBars(requireActivity().window, view)

隐藏状态栏

private void hideSystemBars() {
WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
WindowInsetsControllerCompat windowInsetsController = ViewCompat.getWindowInsetsController(getWindow().getDecorView());
if (windowInsetsController == null) {
return;
}
// Configure the behavior of the hidden system bars
windowInsetsController.setSystemBarsBehavior(WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
// Hide both the status bar and the navigation bar
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars());
}

显示状态栏

private void showSystemBars() {
WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
WindowInsetsControllerCompat windowInsetsController = ViewCompat.getWindowInsetsController(getWindow().getDecorView());
if (windowInsetsController == null) {
return;
}
// Configure the behavior of the hidden system bars
windowInsetsController.setSystemBarsBehavior(WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
// Hide both the status bar and the navigation bar
windowInsetsController.show(WindowInsetsCompat.Type.systemBars());
}

用于带屏幕的顶级摄像机

<item name="android:windowLayoutInDisplayCutoutMode" tools:ignore="NewApi">shortEdges</item>

如何隐藏状态栏 在 Helper 对象类中使用此函数,并在活动中调用它

    fun hideStatusBar(window: Window, context: Context){
if (SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window
.decorView
.systemUiVisibility =
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
window.statusBarColor = ContextCompat.getColor(context, R.color.transparent_bg_color)
} else {
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
}
}

在设置内容视图之前,在活动中调用它。

hideStatusBar(window, this)
setContentView(R.layout.activity_detail)

将以下代码添加到 themes.xml 文件中。

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