在AndroidTestCase中设置视图的宽度和高度

时间:2014-05-08 17:22:38

标签: java android android-testing

在为Android库项目编写测试用例时,我遇到了View维度的一些问题。具体来说,我使用AndroidTestCase来测试自定义View类,其中(除其他外)可以生成其内容的位图。创建位图时,类根据自己的宽度和高度设置位图的宽度和高度:

public Bitmap getBitmap(){
  Bitmap output = Bitmap.createBitmap(this.getWidth(), this.getHeight(), Bitmap.Config.ARGB_8888);
  //Fill in the Bitmap
  return output;
}

我尝试做的一些示例代码:

public void testBitmap(){
  LinearLayout l = new LinearLayout(getContext());
  MyCustomView myView = new MyCustomView(getContext());
  l.addView(myView);
  //draw things in myView
  Bitmap b = myView.getBitmap();
}

如果我从xml布局中对父l进行膨胀,这可以在应用程序中运行,但是当我在单元测试中以编程方式创建所有视图时,myView.getWidth()和myView.getHeight()都返回0这会导致错误:

java.lang.IllegalArgumentException: width and height must be > 0
at android.graphics.Bitmap.createBitmap(Bitmap.java:687)

基于其他一些帖子,我尝试使用LayoutParams调整myView的宽度和高度:

myView.setLayoutParams(new LinearLayout.LayoutParams(100, 100));

我也尝试以类似的方式设置父布局l的LayoutParams。但是,这些都没有成功改变myView的宽度和高度; getWidth()和getHeight()仍然返回0.有什么方法可以确保myView的宽度和高度不为零?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

找到我自己的答案。

在尝试了几件事之后,我发现了而不是:

myView.setLayoutParams(new LinearLayout.LayoutParams(100, 100));

我可以使用:

myView.layout(0, 0, 100, 100);

所以整个示例代码看起来像这样:

public void testBitmap(){
  LinearLayout l = new LinearLayout(getContext());
  l.layout(0, 0, 100, 100);
  MyCustomView myView = new MyCustomView(getContext());
  myView.layout(0, 0, 100, 100);
  l.addView(myView);
  //draw things in myView
  myView.getBitmap();
}