我在条件满足时尝试解除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 :(得分: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;
});