如何禁用 snackbar 滑动以取消行为
How to Disable snackbar swipe to dismis behaviour
我想禁用滑动以消除 snackbar
我试过的行为
很多事情对我都不起作用,任何人都建议我如何实现这一点,
这是我试过的
final Snackbar snackbar = Snackbar
.make(main_content, getResources().getString(R.string.no_internet), Snackbar.LENGTH_INDEFINITE);
snackbar.setActionTextColor(Color.BLACK);
View snackbarView = snackbar.getView();
snackbarView.setBackgroundColor(Color.WHITE);
TextView textView = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.BLACK);
// textView.setTypeface(fontLight);
snackbar.setAction("RETRY", new View.OnClickListener() {
@Override
public void onClick(View view) {
apiAccess();
}
});
snackbar.show();
这是我的小吃店代码我已经尝试了两件事:
1
((android.support.design.widget.CoordinatorLayout.LayoutParams) snackbar.getView().getLayoutParams()).setBehavior(null);
在 snackbar.show();
方法之后,但没有奏效。
2
main_content.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewGroup.LayoutParams lp = main_content.getLayoutParams();
if (lp instanceof CoordinatorLayout.LayoutParams) {
((CoordinatorLayout.LayoutParams) lp).setBehavior(new DisableSwipeBehavior());
main_content.setLayoutParams(lp);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
main_content.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
//noinspection deprecation
main_content.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}
});
public class DisableSwipeBehavior extends SwipeDismissBehavior<Snackbar.SnackbarLayout> {
@Override
public boolean canSwipeDismissView(@NonNull View view) {
return false;
}
}
在上面的代码中 main_content
是我的 CoordinatorLayout。
试试这个:
Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView();
snackbar.setDuration(Snackbar.LENGTH_INDEFINITE);
snackbar.show();
layout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewGroup.LayoutParams lp = layout.getLayoutParams();
if (lp instanceof CoordinatorLayout.LayoutParams) {
((CoordinatorLayout.LayoutParams) lp).setBehavior(new DisableSwipeBehavior());
layout.setLayoutParams(lp);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
layout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
//noinspection deprecation
layout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}
});
DisableSwipeBehavior 所在位置:
public class DisableSwipeBehavior extends SwipeDismissBehavior<Snackbar.SnackbarLayout> {
@Override
public boolean canSwipeDismissView(@NonNull View view) {
return false;
}
}
Source.
我想禁用滑动以消除 snackbar
我试过的行为
很多事情对我都不起作用,任何人都建议我如何实现这一点,
这是我试过的
final Snackbar snackbar = Snackbar
.make(main_content, getResources().getString(R.string.no_internet), Snackbar.LENGTH_INDEFINITE);
snackbar.setActionTextColor(Color.BLACK);
View snackbarView = snackbar.getView();
snackbarView.setBackgroundColor(Color.WHITE);
TextView textView = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.BLACK);
// textView.setTypeface(fontLight);
snackbar.setAction("RETRY", new View.OnClickListener() {
@Override
public void onClick(View view) {
apiAccess();
}
});
snackbar.show();
这是我的小吃店代码我已经尝试了两件事:
1
((android.support.design.widget.CoordinatorLayout.LayoutParams) snackbar.getView().getLayoutParams()).setBehavior(null);
在 snackbar.show();
方法之后,但没有奏效。
2
main_content.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewGroup.LayoutParams lp = main_content.getLayoutParams();
if (lp instanceof CoordinatorLayout.LayoutParams) {
((CoordinatorLayout.LayoutParams) lp).setBehavior(new DisableSwipeBehavior());
main_content.setLayoutParams(lp);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
main_content.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
//noinspection deprecation
main_content.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}
});
public class DisableSwipeBehavior extends SwipeDismissBehavior<Snackbar.SnackbarLayout> {
@Override
public boolean canSwipeDismissView(@NonNull View view) {
return false;
}
}
在上面的代码中 main_content
是我的 CoordinatorLayout。
试试这个:
Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView();
snackbar.setDuration(Snackbar.LENGTH_INDEFINITE);
snackbar.show();
layout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewGroup.LayoutParams lp = layout.getLayoutParams();
if (lp instanceof CoordinatorLayout.LayoutParams) {
((CoordinatorLayout.LayoutParams) lp).setBehavior(new DisableSwipeBehavior());
layout.setLayoutParams(lp);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
layout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
//noinspection deprecation
layout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}
});
DisableSwipeBehavior 所在位置:
public class DisableSwipeBehavior extends SwipeDismissBehavior<Snackbar.SnackbarLayout> {
@Override
public boolean canSwipeDismissView(@NonNull View view) {
return false;
}
}
Source.