2017-01-13 5 views
0

Ich möchte Swipe deaktivieren Verhalten von snackbar zu entlassen i viele Dinge versucht haben, nicht für mich gearbeitet, jemand vorschlagen, wie ich dies erreichen können, Hier ist, was ich versucht habeWie dismis Verhalten snackbar Swipe deaktivieren

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(); 

Das ist mein snackbar Code habe ich zwei Dinge versucht:

((android.support.design.widget.CoordinatorLayout.LayoutParams) snackbar.getView().getLayoutParams()).setBehavior(null); 

nach snackbar.show(); Methode aber hat nicht funktioniert.

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; 
     } 
    } 

oben Code main_content ist mein CoordinatorLayout.

+0

so müssen Sie es halten, ohne deaktivieren oder nur nicht zulassen, dass es mit Swipe deaktivieren? –

+0

http://stackoverflow.com/questions/34031476/how-to-disable-snackbars-swipe-to-dismiss-behavior –

+0

ja ich möchte Snackbar sichtbar wie es ist. will nicht vom Wischen links @Charuka –

Antwort

1

Versuchen Sie folgendes:

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); 
      } 
     } 
    }); 

Wo DisableSwipeBehavior:

public class DisableSwipeBehavior extends SwipeDismissBehavior<Snackbar.SnackbarLayout> { 
    @Override 
    public boolean canSwipeDismissView(@NonNull View view) { 
     return false; 
    } 
} 

Source.

+0

Lassen Sie mich versuchen –

+0

Bitte kopieren Sie nicht und fügen Sie die Antwort eines anderen Benutzers. Wenn Sie glauben, dass eine bereits existierende Antwort die Lösung haben könnte, dann kennzeichnen Sie diese Frage bitte als Duplikat des anderen. –

Verwandte Themen