android - 透明导航栏但不是状态栏
android - Transparent Navigation Bar but not Status Bar
我不确定是否可行,但我正在尝试使导航栏透明而不使状态栏透明。后者的原因是我有一个工具栏,否则会在状态栏后面绘制。
现在我正在使用 fakeStatusBar 布局,它显示在状态栏之前,所以一切对用户来说都很好:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
//now the status bar is transparent too, which we have to fix
//first we get status bar height
int statusBarHeight = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
statusBarHeight = getResources().getDimensionPixelSize(resourceId);
}
//then we get the full width
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int screenWidth = size.x;
//then we set that height to the fake item in the layout
LinearLayout fakeStatusBar = findViewById(R.id.fakeStatusBar);
ViewGroup.LayoutParams params = fakeStatusBar.getLayoutParams();
params.height = statusBarHeight;
params.width = screenWidth;
fakeStatusBar.setLayoutParams(params);
唯一的问题是在进行多任务处理时,缩略图看起来不太好,因为工具栏不在应有的位置。
不完全是我想要的,但我找到了使用半透明导航栏的解决方法。最终代码如下所示:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
//set navigation bar translucent
Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
//now the status bar is translucent too, which we have to fix
//first we get status bar height
int statusBarHeight = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
statusBarHeight = getResources().getDimensionPixelSize(resourceId);
}
//then set it as top padding for the main layout
ConstraintLayout mainLayout = (ConstraintLayout) findViewById(R.id.mainLayout);
mainLayout.setPadding(0,statusBarHeight,0,0);
}
activity.
的主布局中添加了顶部内边距
如果有人知道如何用透明导航栏做类似的事情,那就完美了,但除此之外我对我的解决方案很满意。
我不确定是否可行,但我正在尝试使导航栏透明而不使状态栏透明。后者的原因是我有一个工具栏,否则会在状态栏后面绘制。
现在我正在使用 fakeStatusBar 布局,它显示在状态栏之前,所以一切对用户来说都很好:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
//now the status bar is transparent too, which we have to fix
//first we get status bar height
int statusBarHeight = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
statusBarHeight = getResources().getDimensionPixelSize(resourceId);
}
//then we get the full width
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int screenWidth = size.x;
//then we set that height to the fake item in the layout
LinearLayout fakeStatusBar = findViewById(R.id.fakeStatusBar);
ViewGroup.LayoutParams params = fakeStatusBar.getLayoutParams();
params.height = statusBarHeight;
params.width = screenWidth;
fakeStatusBar.setLayoutParams(params);
唯一的问题是在进行多任务处理时,缩略图看起来不太好,因为工具栏不在应有的位置。
不完全是我想要的,但我找到了使用半透明导航栏的解决方法。最终代码如下所示:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
//set navigation bar translucent
Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
//now the status bar is translucent too, which we have to fix
//first we get status bar height
int statusBarHeight = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
statusBarHeight = getResources().getDimensionPixelSize(resourceId);
}
//then set it as top padding for the main layout
ConstraintLayout mainLayout = (ConstraintLayout) findViewById(R.id.mainLayout);
mainLayout.setPadding(0,statusBarHeight,0,0);
}
activity.
的主布局中添加了顶部内边距如果有人知道如何用透明导航栏做类似的事情,那就完美了,但除此之外我对我的解决方案很满意。