覆盖设计支持库行为
Override design support library behaviour
我正在尝试在满足条件时关闭 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库来满足我的需要。 IE。删除此行 Snackbar.this.dismiss();
。我知道我可以搜索源代码并将其放入 libs 文件夹中,然后我可以对其进行修改,但是有没有其他方法可以做到这一点?
不幸的是,你不能,因为 Snackbar
class 是最终的并且不能覆盖方法,所以它是行为。
您可以尝试将 View.OnTouchListener
设置为 Snackbar
视图并防止它只为操作视图获取任何触摸事件。我不确定 snackBar.getView()
returns 整个小吃店是否包括动作视图。
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;
});
我正在尝试在满足条件时关闭 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库来满足我的需要。 IE。删除此行 Snackbar.this.dismiss();
。我知道我可以搜索源代码并将其放入 libs 文件夹中,然后我可以对其进行修改,但是有没有其他方法可以做到这一点?
不幸的是,你不能,因为 Snackbar
class 是最终的并且不能覆盖方法,所以它是行为。
您可以尝试将 View.OnTouchListener
设置为 Snackbar
视图并防止它只为操作视图获取任何触摸事件。我不确定 snackBar.getView()
returns 整个小吃店是否包括动作视图。
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;
});