【问题标题】:How to Disable snackbar swipe to dismis behaviour [duplicate]如何禁用快餐栏滑动以消除行为[重复]
【发布时间】:2017-05-28 15:13:05
【问题描述】:

我想禁用滑动以消除我尝试过的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。

【问题讨论】:

  • 所以你需要保留它而不禁用或只不允许它使用滑动来禁用它?
  • 是的,我想让小吃店保持原样。不想因向左滑动而被解雇@Charuka
  • 您需要任何其他操作还是只显示它?如果您只想显示代码较少,则需要输入
  • 我只想要 1 个动作“重试”

标签: android swipe-gesture android-snackbar snackbar


【解决方案1】:

试试这个:

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.

【讨论】:

  • 让我试试这个
  • 请不要只是复制和粘贴其他用户的答案。如果您认为预先存在的答案可能有解决方案,请将此问题标记为与其他问题重复。
猜你喜欢
  • 2021-11-13
  • 2016-07-04
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多