MaterialComponents Snackbar 在状态栏下方绘图,尽管我在其上定义了正确的边距
MaterialComponents Snackbar drawing below the status bar although I define correct margins on it
我目前正在我的应用程序中实现 MaterialComponents Snackbar 并开始使用
(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
Snackbar 开始在导航栏后面绘制。通常这应该不是问题,因为我只是使用代码来定义 Snackbar 上的边距,包括导航栏高度,但无论如何,它没有被应用并保持这样:
我用来定义边距的代码如下:
final ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) snackBarView.getLayoutParams();
params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, params.bottomMargin + ThemeUtils.getNavigationBarHeight(this));
snackBarView.setLayoutParams(params);
有人看到我犯的错误吗?任何解决此问题的帮助将不胜感激!提前致谢!
这是我用 FLAG_LAYOUT_NO_LIMITS 实现的 Snackbar,它运行良好。
Snackbar snackbar = Snackbar.make(coordinatorLayout, "Doing good...", Snackbar.LENGTH_LONG);
View snackBarView = snackbar.getView();
final ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) snackBarView.getLayoutParams();
params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, params.bottomMargin + getNavigationBarHeight());
snackBarView.setLayoutParams(params);
TextView tv = snackBarView.findViewById(android.support.design.R.id.snackbar_text);
tv.setTextColor(Color.YELLOW);
snackBarView.setBackgroundColor(Color.BLACK);
snackbar.show();
我的 getNavigationBarHeight() 在哪里:
public int getNavigationBarHeight() {
int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
Toast.makeText(this, "nav bar height: " + getResources().getDimensionPixelSize(resourceId), Toast.LENGTH_SHORT).show();
return getResources().getDimensionPixelSize(resourceId);
}
return 0;
}
我的解决方案现在是在我的布局中添加一个 ConstraintLayout,我在其上设置适合导航栏的边距。然后我将 Snackbar 设置到这个新的 ConstraintLayout 中。相当 hacky,但好吧,我想总比不工作要好......
我目前正在我的应用程序中实现 MaterialComponents Snackbar 并开始使用
(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
Snackbar 开始在导航栏后面绘制。通常这应该不是问题,因为我只是使用代码来定义 Snackbar 上的边距,包括导航栏高度,但无论如何,它没有被应用并保持这样:
我用来定义边距的代码如下:
final ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) snackBarView.getLayoutParams();
params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, params.bottomMargin + ThemeUtils.getNavigationBarHeight(this));
snackBarView.setLayoutParams(params);
有人看到我犯的错误吗?任何解决此问题的帮助将不胜感激!提前致谢!
这是我用 FLAG_LAYOUT_NO_LIMITS 实现的 Snackbar,它运行良好。
Snackbar snackbar = Snackbar.make(coordinatorLayout, "Doing good...", Snackbar.LENGTH_LONG);
View snackBarView = snackbar.getView();
final ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) snackBarView.getLayoutParams();
params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, params.bottomMargin + getNavigationBarHeight());
snackBarView.setLayoutParams(params);
TextView tv = snackBarView.findViewById(android.support.design.R.id.snackbar_text);
tv.setTextColor(Color.YELLOW);
snackBarView.setBackgroundColor(Color.BLACK);
snackbar.show();
我的 getNavigationBarHeight() 在哪里:
public int getNavigationBarHeight() {
int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
Toast.makeText(this, "nav bar height: " + getResources().getDimensionPixelSize(resourceId), Toast.LENGTH_SHORT).show();
return getResources().getDimensionPixelSize(resourceId);
}
return 0;
}
我的解决方案现在是在我的布局中添加一个 ConstraintLayout,我在其上设置适合导航栏的边距。然后我将 Snackbar 设置到这个新的 ConstraintLayout 中。相当 hacky,但好吧,我想总比不工作要好......