android,将XML布局视图添加到自定义类中的膨胀视图中
我很久没有在网上找到答案了,现在我问你是否能帮我 简称: 如何重写addView()(或其他内容)以将XML中定义的视图添加到“自定义视图XML布局”中 长: 我想为我的android应用程序创建一个自定义视图,所以我从RelativeLayout创建了一个干净的子类。在本例中,我让充气机加载一个xml布局以获得一个好的样式 但是现在,我想在自定义视图中添加一些东西,但不想以编程方式添加它(这很简单),而是使用xml。我无法跨越我脑海中的鸿沟来找到解决办法 代码: 自定义类:android,将XML布局视图添加到自定义类中的膨胀视图中,android,xml,layout,Android,Xml,Layout,我很久没有在网上找到答案了,现在我问你是否能帮我 简称: 如何重写addView()(或其他内容)以将XML中定义的视图添加到“自定义视图XML布局”中 长: 我想为我的android应用程序创建一个自定义视图,所以我从RelativeLayout创建了一个干净的子类。在本例中,我让充气机加载一个xml布局以获得一个好的样式 但是现在,我想在自定义视图中添加一些东西,但不想以编程方式添加它(这很简单),而是使用xml。我无法跨越我脑海中的鸿沟来找到解决办法 代码: 自定义类: public cl
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和按钮被添加到子类。。。当然但是在那之后,我在Slider中得到了3个孩子,文本视图,按钮和我从R.layout.layour中膨胀的布局。但我只想要一个包含按钮和文本视图的子(布局)
正如您在addView中看到的,我试图简单地将传递的“视图子级”添加到_innerLayout中。那不行。Android框架一直在调用addView,并以StackOverflowerr结束
还有两件事要告诉你:
你能帮我吗?你可以看看如何将儿童充气到自定义视图中 您需要的是:
标记定义具有子级的布局只需覆盖自定义视图中的
addView()
方法滑块
,并检查孩子数。
如果getChildCount()==0
,则这是第一次添加,是视图初始化
科特林示例:
override fun addView(child: View?, index: Int, params: ViewGroup.LayoutParams?) {
if (childCount == 0) {
super.addView(child, index, params)
} else {
// Do my own addition
}
}