我在为Android Library项目编写测试用例时遇到了一些视图维度问题。具体来说,我使用AndroidTestCase来测试一个自定义视图类,它(除其他外)可以生成其内容的位图。当创建位图时,该类根据其自身的宽度和高度设置位图的宽度和高度:
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的宽度和高度不为零?
非常感谢任何帮助。
找到了自己的答案。
在做了一些尝试之后,我发现:
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();
}