2016-08-01 96 views

回答

0

這種行爲的關鍵在於它在所有Android手機上的行爲方式都是相同的。這也意味着熟悉Android體驗的用戶,甚至是那些曾經看過Snackbar並將其解散的用戶都知道,向右滑動會消除它。

有改變這種行爲的請求時,它可能有足夠的明星批准(這是目前中等優先級):https://code.google.com/p/android/issues/detail?id=80102

0
Snackbar snackbar = Snackbar.make(fab, "snackbar", Snackbar.LENGTH_SHORT); 
      snackbar.show(); 
      final Snackbar.SnackbarLayout snackbarLayout = (Snackbar.SnackbarLayout) snackbar.getView(); 
      snackbar.setDuration(Snackbar.LENGTH_INDEFINITE); 
      snackbar.show(); 
      snackbarLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
       @Override 
       public void onGlobalLayout() { 
        ViewGroup.LayoutParams lp = snackbarLayout.getLayoutParams(); 
        if (lp instanceof CoordinatorLayout.LayoutParams) { 
         ((CoordinatorLayout.LayoutParams) lp).setBehavior(new SwipeDismissBehavior<Snackbar.SnackbarLayout>(){ 
          @Override 
          public boolean canSwipeDismissView(View view) { 
           return false; 
          } 
         }); 
         snackbarLayout.setLayoutParams(lp); 
        } 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
         snackbarLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
        } else { 
         snackbarLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
        } 
       } 
      }); 

此代碼爲我工作。

+0

除非您將「canSwipeDismissView」編輯爲「返回true;」,否則這段代碼不起作用。它也打破了被駁回事件的回調。 –