2016-09-06 39 views
0

我要检查,如果视图是可见的,所以我用了被示()上查看的方法,但因为我创造我自己的看法和这些取决于ID它很没用,所以这里的例子图:Robotium - 如何查询视图的可见性价值

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异常,它甚至不打算被示()。

我逮住例外

private boolean catcher() { 
    try { 
     btn_addAlert().isShown(); 
     return true; 
    } catch (AssertionFailedError e) { 
     return false; 
    } 
} 

但它是错误的方式,因为异常是不是该还我必须等待整个超时时间,使其抛出异常。然后它只是返回false。

那么在这种情况下我该怎么办?

非常感谢。

回答

0

你可以检查它像

if(v.getVisibility() == View.VISIBLE) 
     // do you stuff here 
+0

我觉得他的问题是比较复杂的。这不仅仅是如何找到函数“isShown”。 – Cocorico

+0

btn_addAlert() - 这是问题所在。它不会改变,因为getVisibility()不会被转换。 –

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

+0

这只是下面答案的切换版本。我想做一些事情,直到视图可见,所以使用while循环,但如果视图不可见,它不会返回false并跳过循环。它会抛出异常并将我的测试标记为失败。当我得到View并且视图不可见时它崩溃,因为它正在搜索它,并且它消失了,所以它引发异常。 –

+0

没有。下面的人是使用mistical'v',我使用直接的'Robotium'代码,所以这是不相等的。不要针对听众的目的使用循环 – piotrek1543

相关问题