2017-01-13 4 views
0

Я хочу, чтобы отключить салфетки, чтобы распускать поведение snackbar я попробовал много вещей, не работали какое-либо для меня, любых один подсказывают, как я могу добиться этого, Вот что я попробовалКак отключить закусочную салфетку, чтобы dismis поведение

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

Это мой закусочная код я попробовал две вещи:

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

после snackbar.show(); метод, но не сработал.

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.

+0

так что вы должны держать его без отключения или только не позволяют ему отключить с помощью салфетки? –

+0

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

+0

да, я хочу, чтобы накрыть снекбар, как есть. не хотите увольнять с прокрутки влево @Charuka –

ответ

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.

+0

позвольте мне попробовать –

+0

Пожалуйста, не просто скопируйте и вставьте ответ другого пользователя. Если вы считаете, что существующий ответ может иметь решение, пожалуйста, отметьте этот вопрос как дубликат другого. –

Смежные вопросы