📅  最后修改于: 2023-12-03 15:42:28.708000             🧑  作者: Mango
当我们需要在 Android 应用中删除状态栏时,传统的做法是直接将 android:theme
属性设为 Theme.NoTitleBar
,但这样的话会直接去掉整个标题栏,可能会影响用户体验。这时,颤动删除状态栏的方法可能会更加优美。
颤动删除状态栏的基本思路是在状态栏当前隐身时将标题栏从原来的位置下移,从而达到删除状态栏的效果。为了保证效果更加美观,我们还需要对整个 App 的布局做出一些调整。
下面是具体的步骤:
onCreate
方法中,通过 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
指定应用的布局是否应从应用窗口的顶部扩展到状态栏的区域。WindowInsetsCompat
获取系统状态栏的高度,并将上述空白 View 的高度设为状态栏的高度。下面是具体的实现代码:
public class MainActivity extends AppCompatActivity {
private View mStatusBarPlaceholder; // 空白 View,填充状态栏的位置
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 指定应用的布局是否应从应用窗口的顶部扩展到状态栏的区域
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
// 通过 WindowInsetsCompat 获取系统状态栏的高度,并设置空白 View 的高度为状态栏的高度
mStatusBarPlaceholder = findViewById(R.id.status_bar_placeholder);
ViewCompat.setOnApplyWindowInsetsListener(mStatusBarPlaceholder, new OnApplyWindowInsetsListener() {
@Override
public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) {
ViewGroup.LayoutParams layoutParams = v.getLayoutParams();
layoutParams.height = insets.getSystemWindowInsetTop();
v.setLayoutParams(layoutParams);
return insets;
}
});
// 当状态栏隐身时,将标题栏的位置下移
getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
getSupportActionBar().show();
} else {
getSupportActionBar().hide();
}
}
});
}
}
通过颤动删除状态栏的方法,我们能够轻松地删除状态栏,同时也能保证整个应用的布局得到优化。如果你在 Android 应用中需要删除状态栏,不妨试试上述方法,看看效果如何。