Android中使用xml布局的自定义包装视图

时间:2018-09-28 08:27:46

标签: java android android-layout kotlin android-constraintlayout

我想创建一个包装器元素,该元素可以在整个应用程序中重复使用,因为它是每个屏幕的基础。 该包装器应该可以添加到Android Studio中的布局编辑器,并且需要能够容纳在编辑器中插入的所有内部元素。 但是这些元素必须插入到带有图片的标头下的布局内,并且只能插入在包装XML布局(innerContainer)中定义的指定区域内。

enter image description here

这是包装器的布局:

<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.constraint.ConstraintLayout
    ...
    android:background="@drawable/frame_container_layout"
    tools:context=...>

    <include
        android:id="@+id/cv_header"
        layout="@layout/cv_header"
        ...>
    </include>

    <android.support.constraint.ConstraintLayout
        android:id="@+id/innerContainer"
        .../>

</android.support.constraint.ConstraintLayout>

我需要的是在自定义视图中以某种方式使用此布局,即在某处使用该元素时,这些元素只会插入到 innerContainer 中。

子XML:

    <...custom_views.WrapperFragmentView
        ...
        app:exampleColor="#33b5e5"
        app:exampleDimension="24sp"
        app:exampleDrawable="@android:drawable/ic_menu_add"
        app:exampleString="Hello, WrapperFragmentView">


        <TextView
            android:id="@+id/textView1"
            ...
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

    </...custom_views.WrapperFragmentView>

现在将孩子插入到包装器布局上,这是我不想要的。它不在innerContainer内部。

在我定义的kotlin文件中

class WrapperFragmentView : android.support.constraint.ConstraintLayout {
...
    private fun init(attrs: AttributeSet?, defStyle: Int) {
        var inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
        inflater.inflate(R.layout.cv_wrapper_fragment, this, true)


        findViewById<android.support.constraint.ConstraintLayout>(R.id.innerContainer)

innerContainer是我想要作为将要使用它的子级的根元素的视图。不是整个布局cv_wrapper_fragment。

如何在WrapperFragmentView中设置它?

或者,如果整个概念是错误的,并且有一种更简单的方法来处理可重复使用的包装元素,那么我就是这样。

0 个答案:

没有答案