gpt4 book ai didi

android - 试图以编程方式将 View 添加到 Kotlin 中的 ContraintLayout 的奇怪行为

转载 作者:行者123 更新时间:2023-11-29 15:36:03 24 4
gpt4 key购买 nike

我是从 iOS 开发人员背景转到 Android 的,在以编程方式添加 View 时,我很难让 ConstraintLayout 正常工作。

我有一个非常简单的 Activity ,其中包含一个 ConstraintLayout 和一个我放置在 Android Studio 设计窗口中的按钮。当按下按钮时,我添加了一个 textView 和另一个按钮。我试图限制它们,使它们与 ConstraintLayout 顶部的距离相同,并且 textView 的前缘被限制在 ConstraintLayout 的左侧,按钮被限制在 ConstraintLayout 的右侧。

我的 XML 如下:

<android.support.constraint.ConstraintLayout 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:id="@+id/parentViewConstraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_orange_dark"
tools:context=".MainActivity">

<Button
android:id="@+id/addWidgetButton"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="28dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:fontFamily="@font/muli_bold"
android:text="Add New Widget"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />

</android.support.constraint.ConstraintLayout>

还有问题中的 Kotlin

addWidgetButton.setOnClickListener() {

val textView = TextView(this)
textView.setTextColor(Color.BLACK)
textView.setTextSize(20f)
textView.setText("Text message for testing")

val newButton = Button(this)
newButton.setText("Push me")

parentViewConstraintLayout.addView(textView)
parentViewConstraintLayout.addView(newButton)

val constraintSet = ConstraintSet()
constraintSet.clone(parentViewConstraintLayout)

constraintSet.connect(textView.id, ConstraintSet.TOP, parentViewConstraintLayout.id, ConstraintSet.TOP, 10)
constraintSet.connect(textView.id, ConstraintSet.START, parentViewConstraintLayout.id, ConstraintSet.START, 10)

constraintSet.connect(newButton.id, ConstraintSet.END, parentViewConstraintLayout.id, ConstraintSet.END, 30)
constraintSet.connect(newButton.id, ConstraintSet.TOP, parentViewConstraintLayout.id, ConstraintSet.TOP, 50)

constraintSet.applyTo(parentViewConstraintLayout)
}

按下按钮时,我得到的不是预期的行为: enter image description here

如果我注释掉一些代码以便我只添加一个 View (按钮或 TextView )它可以正常工作。他们之间有一些我不明白的奇怪互动。

最佳答案

ConstraintLayout 约束与资源 ID 一起使用。我看到您在哪里创建了 TextViewButton,但是我没有看到您在哪里为这些 View 设置了 id。也许一些 Kotlin 魔法?

对于 API 17+,您可以使用 View.generateViewId()生成 id 和 View.setId()设置它。然后您可以引用 ConstraintSet 中的 id。现在他们都是View.NO_ID. .

我还要补充一点,如果你想将父级作为约束引用,它是 ConstraintSet.PARENT_ID .

关于android - 试图以编程方式将 View 添加到 Kotlin 中的 ContraintLayout 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49846529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com