我想检查视图是否可见,所以我在视图中使用了isShown()方法,但它没用,因为我创建自己的视图,这些视图取决于id,所以这里的示例视图:
private static final String BTN_ADD_CURRENCY_ALERT = "action_add_currency_alert";
private View btn_AddAlert() {
return mainHelper.getView(BTN_ADD_CURRENCY_ALERT);
}
这是getView();
的主体public View getView(String id) {
return solo.getView(id);
}
然后我想看看这个元素是否可见(如果没有则应该返回false)。
我称之为
if (btn_addAlert().isShown()){...}
问题是,当我调用btn_addAlert()
并且视图不可见时,我得到AssertionFailedError,它甚至没有进入isShown()。
我抓住了异常
private boolean catcher() {
try {
btn_addAlert().isShown();
return true;
} catch (AssertionFailedError e) {
return false;
}
}
但这是错误的方式,因为异常不是为了这个,而且我必须等待整个超时时间才能使它抛出异常。然后它就会返回false。
那么在这种情况下我该怎么办?
谢谢你的到来。
答案 0 :(得分:0)
您可以查看
if(v.getVisibility() == View.VISIBLE)
// do you stuff here
答案 1 :(得分:0)
让我们说你已经在使用这种方法:
public View getView(String id) {
return solo.getView(id);
}
检查此视图是否可见,您可以使用:
switch (getView("R.id.button").getVisibility()) {
case (View.VISIBLE): {
break;
}
case (View.INVISIBLE): {
break;
}
case (View.GONE): {
break;
}
default:
break;
}
}
在您的确切情况下,请尝试使用btn_addAlert().getVisibility()
代替getView("R.id.button").getVisibility()
。
希望它会有所帮助
编辑:尝试使用其中一个侦听器来检查视图的可见性是否已更改:
使用ViewTreeObserver().addOnGlobalLayoutListener
btn_addAlert().setTag(myView.getVisibility());
btn_addAlert().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int newVis = btn_addAlert().getVisibility();
if((int)btn_addAlert().getTag() != newVis) {
btn_addAlert().setTag(myView.getVisibility());
//visibility has changed
//here you can use my "switch" statement
}
}
});
检查:Handle a view visibility change without overriding the view
使用OnSystemUiVisibilityChangeListener
:
View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener
(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
// Note that system bars will only be "visible" if none of the
// LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
// TODO: The system bars are visible. Make any desired
// adjustments to your UI, such as showing the action bar or
// other navigational controls.
} else {
// TODO: The system bars are NOT visible. Make any desired
// adjustments to your UI, such as hiding the action bar or
// other navigational controls.
}
}
});
检查:https://developer.android.com/training/system-ui/visibility.html