android - 以编程方式更改 ConstraintLayout 中的宽度和高度不起作用

标签 android android-layout android-constraintlayout

我想以编程方式将以下 UI 更改为全屏。

<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/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    >

    <TextView
        android:id="@+id/one"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ONE"
        android:background="@android:color/darker_gray"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/two"

        />

    <TextView
        android:id="@+id/two"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TWO"
        android:background="@android:color/holo_blue_dark"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toRightOf="@+id/one"
        />

</android.support.constraint.ConstraintLayout>

在我的 Kotlin 文件中:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val param = ConstraintLayout.LayoutParams(0, 0)

        one.layoutParams = param
        two.layoutParams = param
    }
}

在我将宽度和高度设置为 0 后,两个 TextView 都消失了,而不是全屏划伤。

所需的用户界面 enter image description here

最佳答案

你做错了。您必须应用一个新的 ConstraintSet,例如:

val constraintSet1 = ConstraintSet()
constraintSet1.clone(yourConstraintLayout)

val constraintSet2 = ConstraintSet()
constraintSet2.clone(yourConstraintLayout)
constraintSet2.constrainWidth(R.id.one, 0)
constraintSet2.constrainWidth(R.id.two, 0)
constraintSet2.constrainHeight(R.id.one, 0)
constraintSet2.constrainHeight(R.id.two, 0)

// to switch to full screen
constraintSet2.applyTo(yourConstraintLayout)

// to get back to your original screen
constraintSet1.applyTo(yourConstraintLayout)

关于android - 以编程方式更改 ConstraintLayout 中的宽度和高度不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51298383/

相关文章:

android - 为什么我会收到 "Error Retrieving parent for item: No resource found that matches the given name ' @android :style/Theme. Dialog.Alert'”?

android - 如何调整约束布局

android - 新应用程序版本的 Assets 文件夹中的只读 SQLite 数据库更新

android - 添加增强调试器以查看基于 Smack android 的 XMPP 客户端的数据包级别信息

android - bottone1 无法解析或不是字段

Android Material CardView 与 ConstraintLayout 剪辑子项不起作用

android - ConstaintLayout 内的 DrawerLayout - java.lang.IllegalArgumentException : DrawerLayout must be measured with MeasureSpec. 完全正确

android - 无法获取 android.permission.CLEAR_APP_USER_DATA

android - 升级到 firebase messaging 17.1.0 后未生成 token

android - 使用getSegment逐步绘制路径