我已经有一段时间没有在互联网上找到答案了,现在我问你是否可以帮助我。
简短:我应该如何覆盖 addView() (或其他东西)以将 XML 中定义的视图添加到我的“自定义视图膨胀 XML 布局”
Long:我想为我的 android 应用程序创建一个自定义视图,所以我从 RelativeLayout 创建了一个干净的子类。在此,我让 Inflater 加载一个 xml 布局以获得漂亮的样式。
但是现在,我想在自定义视图中添加一些东西,但不想以编程方式添加它(这很简单),而是使用 xml。我无法跨越脑海中的鸿沟来找到解决方案......
代码:自定义类:
public class Slider extends RelativeLayout {
private RelativeLayout _innerLayout;
public Slider(Context context) {
super(context);
init();
}
public Slider(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
protected void init() {
LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
_innerLayout = (RelativeLayout) layoutInflater.inflate(R.layout.layout_r, this);
}
@Override
public void addView(View child) {
//if (_innerLayout != null) _innerLayout.addView(child);
super.addView(child);
}
... all other addView's are overridden in the same way
使用子类的 XML 文件:
<packagename....Slider
android:id="@+id/slider1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/Red" >
<TextView
android:id="@+id/heading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="HEADING" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="bbb" />
...
TextView 和 Button 被添加到子类中……当然……但是在那之后,我在 Slider、TextView、Button 和我的 R.layout.layout_r 中的膨胀布局中有 3 个孩子。但我只想要 1 个带有 Button 和 TextView 的孩子(layout_r)。
正如您在 addView 中看到的,我试图简单地将传递的“View child”添加到 _innerLayout。那行不通。Android 框架不断调用 addView 并以 StackOverFlowError 结束
还有两件事要告诉你:
我知道从 XML 添加视图不会调用给定的 addView,但我也覆盖了所有其他视图,并且所有视图看起来都一样,因此无需显示它们。
调试器告诉我,在 _innerLayout 获得膨胀的布局之前调用 addView
2.是什么原因?
你能帮我吗?