Android: 子类linearLayout 不垂直设置

Android: Subclass linearLayout do not set vertically

我想在下面翻译我的代码xml,但是在代码中并没有给我相同的结果,看图,左边是代码中的结果,右边是[=25中的结果=]:

这是我的子类:

class FloatingButtonMultiple : LinearLayout {

constructor(context: Context) : super(context) {
    setup()
}

constructor(context: Context, @Nullable attrs: AttributeSet?) : super(context, attrs) {
    setup()
}

constructor(context: Context, @Nullable attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
    setup()
}


// MARK: - Set view

fun setup() {
    setLinearLayout()
    floatingBtn()
    addBtn()
}

private fun setLinearLayout() {
    val params = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT).apply {
        addRule(RelativeLayout.ALIGN_PARENT_BOTTOM)
    }

    orientation = VERTICAL

    this.layoutParams = params
}

private fun addBtn() {
    val linearParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT).apply {
        gravity = Gravity.END
        orientation = HORIZONTAL
    }

    val linearLayout = LinearLayout(context).apply {
        layoutParams = linearParams
    }

    // CardView
    val cardParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
        topMargin = 8.toDp
        marginEnd = 10.toDp
    }

    val cardView = CardView(context).apply {
        setCardBackgroundColor(Color.parseColor("#C4000000"))
        layoutParams = cardParams
    }

    //TextView
    val txtParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
        marginStart = 8.toDp
        marginEnd = 8.toDp
    }

    val txt = TextView(context).apply {
        text = "AAAAA"
        setTextColor(Color.WHITE)
        layoutParams = txtParams
    }

    cardView.addView(txt)

    linearLayout.addView(cardView)

    //Btn
    val btnParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
        bottomMargin = 8.toDp
        marginEnd = 29.toDp
    }

    val btn = FloatingActionButton(context).apply {
        size = FloatingActionButton.SIZE_MINI
        layoutParams = btnParams
    }

    linearLayout.addView(btn)

    this.addView(linearLayout)
}

private fun floatingBtn() {
    val params = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
        gravity = Gravity.END
        marginEnd = 20.toDp
        bottomMargin = 20.toDp
    }

    val btn = FloatingActionButton(context).apply {
        layoutParams = params
    }

    this.addView(btn)
}

这是我的 xml 代码:

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="end"
        android:orientation="horizontal">

        <android.support.v7.widget.CardView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="10dp"
            app:cardBackgroundColor="#C4000000">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginEnd="8dp"
                android:text="AAAA"
                android:textColor="#fff" />

        </android.support.v7.widget.CardView>

        <android.support.design.widget.FloatingActionButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="29dp"
            android:layout_marginBottom="8dp"
            app:fabSize="mini" />

    </LinearLayout>


    <android.support.design.widget.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:layout_marginEnd="20dp"
        android:layout_marginBottom="20dp" />

</LinearLayout>

我没看懂我想我翻译的代码正好xml代码?问题出在哪里?为什么我的子类在函数 setLinearLayout()

中设置时不垂直

您需要在代码中的以下变量中将方向设置为垂直 -

val linearLayout = LinearLayout(context).apply {
    layoutParams = linearParams
}
linearlayout.orientation = VERTICAL

解决方案

这很奇怪,但是通过调用 setLinearLayout() 最后它起作用

来改变函数的位置

代码:

fun setup() {
    floatingBtn()
    addBtn()
    setLinearLayout()
}