android - 如何从 MainActivity.kt 为动态创建的 TextView 设置 constraintTop_toTopOf 属性
问题描述
我正在尝试制作一个非常基本的纸牌游戏。我想动态创建一堆TextView
sMainActivity.kt
作为占位符堆叠在另一个 TextView 的确切位置上,这是在activity_main.xml
我需要能够通过更改位置约束将这些对象移动到不同位置时创建的。
我搜索了文档,但找不到如何在运行时以编程方式设置约束。设置 x 和 y 不起作用,因为我正在使用约束。
如何将电视的约束设置为占位符的顶部和边距?就像是:
tv.layoutParams.topToTopOf = "@id/deck_placeholder"
tv.layoutParams.marginLeft = "10dp"
实现下面的 xml 设置
app:layout_constraintEnd_toEndOf="@id/deck_placeholder"
app:layout_constraintTop_toTopOf="@id/deck_placeholder"
活动主.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/deck_placeholder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:text="DD"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.kt 类:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var layout = findViewById<ConstraintLayout>(R.id.main_layout)
val placeholder = findViewById<TextView>(R.id.deck_placeholder)
for (i in 1..52) {
var tv = TextView(this)
tv.text = i.toString()
tv.id = generateViewId()
//TODO: how to set constraint and position here
//tv.layoutParams = placeholder.layoutParams
layout.addView(tv)
}
}
}
结果如下所示。生成的 TextView 应该在 DD 所在的屏幕右侧。
我试图复制占位符的布局参数并且卡片在正确的位置,但是我以后如何通过指定约束和边距将它移动到另一个地方?
或者是否有更好的布局可以使用,以便我可以放置 X 和 Y 坐标,但仍能响应不同的屏幕尺寸/方向?
将 Android Studio 4.1.3 与 Kotlin 一起使用。感谢您的任何帮助。
解决方案
推荐阅读
- c# - 在 Unity 运行时将图像导入资源文件夹
- python-3.x - 策略中的 AWS Boto3 语法错误
- vba - 如何每隔四个分隔符拆分一个字符串?
- java - 尝试拆分从用户扫描的 Java 中的字符串
- linux - Linux - 在 runlevel3 中启动并添加 X11 组件
- c - 将数组复制到另一个数组(字符串)中,在C中复制其内容
- powershell - 无法使用接收到的继续令牌进行迭代
- r - R,bookdown 包,在 R 块中强制 LaTex
- python - Matplotlib - 结合文本/注释坐标系
- c++ - 在 C++ 中,是否可以“重载”作为另一个类成员的对象?