2015-11-10 120 views
0

當條件滿足時,我試圖解僱Snackbar覆蓋設計支持庫行爲

snackbar.setAction("Retry", new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if(isConnected(getApplicationContext())){ 
        toggleButtonsState(true); 
        snackbar.dismiss(); 
       } else { 
        snackbar.show(); 
       } 
      } 
     }); 
     snackbar.show(); 

但是,Snackbar實現會在單擊操作時自動解除它。

public Snackbar setAction(CharSequence text, final OnClickListener listener) { 
    TextView tv = this.mView.getActionView(); 
    if(!TextUtils.isEmpty(text) && listener != null) { 
     tv.setVisibility(0); 
     tv.setText(text); 
     tv.setOnClickListener(new OnClickListener() { 
      public void onClick(View view) { 
       listener.onClick(view); 
       Snackbar.this.dismiss(); 
      } 
     }); 
    } else { 
     tv.setVisibility(8); 
     tv.setOnClickListener((OnClickListener)null); 
    } 

    return this; 
} 

一般來說,有沒有修改的Gradle編譯庫,以便與我的需要應付的方法。即。刪除此行Snackbar.this.dismiss();。我知道我可以搜索源代碼,並將其放入libs文件夾中,然後我可以修改它,但有沒有辦法做到這一點?

回答

0

不幸的是,你不能因爲Snackbar類是最終的,不能重寫方法,所以它的行爲。

您可以嘗試的是將View.OnTouchListener設置爲Snackbar視圖,並防止它僅針對操作視圖獲取任何觸摸事件。我不確定snackBar.getView()是否會返回包含操作視圖在內的整個快餐欄。

snackBar.getView().setOnTouchListener(new View.OnTouchListener(){ 
    @Override 
    public boolean onTouch (View v, MotionEvent event){ 
     if(v instanceof Button) { 
      //This is the Action view event, do your logic. 
      if(isConnected(getApplicationContext())){ 
        toggleButtonsState(true); 
       return false; 
       } 
      return true; 
     } 
     //not action view, proceed normally 
     return false; 
     });