Android 的 RelativeLayout 单元测试设置
Posted
技术标签:
【中文标题】Android 的 RelativeLayout 单元测试设置【英文标题】:Android's RelativeLayout Unit Test setup 【发布时间】:2011-01-29 17:21:45 【问题描述】:我正在尝试为我的 android 的 RelativeLayout 编写单元测试。目前,我的测试代码设置如下:
public class SampleRelativeLayoutTest extends AndroidTestCase
private ViewGroup testView;
private ImageView icon;
private TextView title;
@Override
protected void setUp() throws Exception
super.setUp();
// inflate the layout
final Context context = getContext();
final LayoutInflater inflater = LayoutInflater.from(context);
testView = (ViewGroup) inflater.inflate(R.layout.sample_layout,
null);
// manually measure and layout
testView.measure(500, 500);
testView.layout(0, 0, 500, 500);
// init variables
icon = (ImageView) testView.findViewById(R.id.icon);
title = (TextView) testView.findViewById(R.id.title);
但是,我遇到了带有以下堆栈跟踪的 NullPointerException
java.lang.NullPointerException
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:427)
at android.view.View.measure(View.java:7964)
at com.dqminh.test.view.SampleRelativeLayoutTest.setUp(SampleRelativeLayoutTest.java:33)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
我应该在我的 setUp() 代码中进行哪些更改以使测试正常运行?
【问题讨论】:
这对我来说就像一个魅力:***.com/a/6086510/1293704 【参考方案1】:我有一份 Android 源代码的副本,但不确定它是否与您正在使用的相同(或者对于这门课可能没关系)。异常是 onMeasure 方法内 RelativeLayout 第 427 行的 NullPointerException。我拥有的版本中的那一行是 onMeasure 方法中 mLayoutParams 实例变量的第一次访问。您是否可能忘记在您的 xml 布局或类似的东西中添加 layout_width 和 layout_height 参数?
【讨论】:
谢谢,确实我错过了布局参数。添加后:testView.setLayoutParams(new LayoutParams(500,500));代码运行正常:-)【参考方案2】:如果您将RelativeLayout 包装在LinearLayout 中,也可以使用。并改为传递 Linearlayout。
【讨论】:
【参考方案3】:我会这样做的:
LayoutParams layoutParams = new LayoutParams(500,500);
testView.setLayoutParams(layoutParams);
testView.layout(0, 0, 500, 500);
【讨论】:
【参考方案4】:另一个可能的原因是:RelativeLayout
的大小与其子元素的位置之间存在循环依赖关系。例如,您有一个RelativeLayout
,其高度设置为WRAP_CONTENT
,一个子级设置为ALIGN_PARENT_BOTTOM
。
下面是RelativeLayout
的注解:
可以在其中描述子项位置的布局 与彼此或与父母的关系。为了效率, 视图之间的关系是一次性评估的,所以如果视图 Y 是 取决于视图 X 的位置,确保视图 X 先出现 在布局中。
请注意,RelativeLayout
的大小与其子项的位置之间不能存在循环依赖关系。例如,您不能有一个高度设置为WRAP_CONTENT
的RelativeLayout
和一个设置为ALIGN_PARENT_BOTTOM
的子级。
有关布局属性,另请参阅RelativeLayout.LayoutParams
。
【讨论】:
以上是关于Android 的 RelativeLayout 单元测试设置的主要内容,如果未能解决你的问题,请参考以下文章
Android布局之相对布局——RelativeLayout
Android相对布局(RelativeLayout)最全解析