Android - FrameLayout,带有需要构造函数的自定义视图

时间:2014-10-20 18:49:28

标签: android android-layout android-4.0-ice-cream-sandwich android-4.4-kitkat android-relativelayout

我尝试做的是在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的例子,但我没有看到通过该方法设置构造函数...所以有更好的方法吗这仍然允许自定义视图有一个构造函数,或者我用我当前的代码弄乱了吗?

2 个答案:

答案 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);