Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android,将XML布局视图添加到自定义类中的膨胀视图中_Android_Xml_Layout - Fatal编程技术网

android,将XML布局视图添加到自定义类中的膨胀视图中

android,将XML布局视图添加到自定义类中的膨胀视图中,android,xml,layout,Android,Xml,Layout,我很久没有在网上找到答案了,现在我问你是否能帮我 简称: 如何重写addView()(或其他内容)以将XML中定义的视图添加到“自定义视图XML布局”中 长: 我想为我的android应用程序创建一个自定义视图,所以我从RelativeLayout创建了一个干净的子类。在本例中,我让充气机加载一个xml布局以获得一个好的样式 但是现在,我想在自定义视图中添加一些东西,但不想以编程方式添加它(这很简单),而是使用xml。我无法跨越我脑海中的鸿沟来找到解决办法 代码: 自定义类: public cl

我很久没有在网上找到答案了,现在我问你是否能帮我

简称: 如何重写addView()(或其他内容)以将XML中定义的视图添加到“自定义视图XML布局”中

长: 我想为我的android应用程序创建一个自定义视图,所以我从RelativeLayout创建了一个干净的子类。在本例中,我让充气机加载一个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和按钮被添加到子类。。。当然但是在那之后,我在Slider中得到了3个孩子,文本视图,按钮和我从R.layout.layour中膨胀的布局。但我只想要一个包含按钮和文本视图的子(布局)

正如您在addView中看到的,我试图简单地将传递的“视图子级”添加到_innerLayout中。那不行。Android框架一直在调用addView,并以StackOverflowerr结束

还有两件事要告诉你:

  • 我知道从XML添加视图不会调用给定的addView,但我也覆盖了所有其他视图,所有视图看起来都一样,因此无需显示它们

  • 调试器告诉我,addView在innerLayout得到膨胀的布局之前被调用

  • 是2。原因是什么


    你能帮我吗?

    你可以看看如何将儿童充气到自定义视图中

    您需要的是:

  • 使用
    标记定义具有子级的布局
  • 在自定义视图构造函数中使用

  • 只需覆盖自定义视图中的
    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
        }
    }