我尝试做的是在RelativeLayout中使用自定义视图(构造函数和onDraw方法)和一组控件,并在FrameLayout中与它们一起显示。我的代码目前使用Null Pointer Execption添加叠加和崩溃,但是如果我直接添加叠加并删除FrameLayout&自定义视图有效。
FrameLayout layout = new FrameLayout(this);
SampleView sv = new SampleView(this, objectA, objectB, ObjectC), RESULTS);
RelativeLayout overlay = (RelativeLayout) findViewById(R.layout.analysis_overlay);
layout.addView(sv);
layout.addView(overlay);
setContentView(layout);
我认为有更好的方法可以做到这一点,我已经看到了xml中存在的FrameLayout的例子,但我没有看到通过该方法设置构造函数...所以有更好的方法吗这仍然允许自定义视图有一个构造函数,或者我用我当前的代码弄乱了吗?
答案 0 :(得分:1)
RelativeLayout overlay = (RelativeLayout) findViewById(R.layout.analysis_overlay);
您永远无法找到ID为R.layout
的任何内容。使用R.id
。
使用setContentView()
Activity
时,您在findViewById()
之前找不到任何内容。
在实际包含您要查找的叠加层的视图层次结构上调用findViewById()
。
如果您只想要扩展XML布局,请使用LayoutInflater
。
答案 1 :(得分:1)
您正在尝试查找布局资源的ID。相反,膨胀您的相对布局(布局资源),然后添加它。
FrameLayout layout = new FrameLayout(this);
SampleView sv = new SampleView(this, objectA, objectB, ObjectC), RESULTS);
RelativeLayout overlay = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.analysis_overlay, layout, false);
layout.addView(sv);
layout.addView(overlay);
setContentView(layout);