标签: android-constraintlayout

ConstraintLayout,当依赖于约束的视图消失时,布局视图表现得很奇怪

我正在使用ConstraintLayout,我将在下面显示

在此输入图像描述

我想隐藏First(使用已消失),以及我期望的视图如下所示(ElasticBody将延伸以使用原始First视图空间).

在此输入图像描述

但是,当我实际设置First为时gone,我的视图结果如下(所有图像都来自Android Studio Design视图).我Elastic Body也失踪了,高度奇怪地扩大了.

在此输入图像描述

我的布局代码如下

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp">

    <TextView
        android:id="@+id/txt_first"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#0ff"
        android:text="First"
        android:visibility="gone"
        android:textSize="26sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/txt_body"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/txt_body"
        android:layout_width="0dp"
        android:background="#f0f"
        android:layout_height="wrap_content"
        android:text="Elastic Body"
        android:textSize="26sp"

        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/txt_tail"
        app:layout_constraintStart_toEndOf="@+id/txt_first"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/txt_tail"
        android:background="#ff0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Tail"
        android:textSize="26sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/txt_body"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

(注意,如果你删除它gone,你将获得第一个图像视图).为什么会这样?我怎么能解决它在我First离开的地方,我可以Elastic Body伸展正确吗?

p/s:我知道如何在LinearLayout和RelativeLayout中做到这一点......但是想知道这是否是对ConstraintLayout的限制?

android android-layout android-constraintlayout

23
推荐指数
4
解决办法
2万
查看次数

建议在Android中的ConstraintLayout中使用LinearLayout吗?

我是ConstraintLayoutAndroid的新手,也是Android的新手.我有个问题.LinearLayout在内部使用是否可取ConstraintLayout?例如:

<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
    app:srcCompat="@drawable/landing_screen"
    android:layout_height="match_parent"
    tools:context="com.braigolabs.braigo.landing.LandingActivity">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:scaleType="centerCrop"
        app:srcCompat="@drawable/landing_screen"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintVertical_bias="1.0"
        app:layout_constraintHorizontal_bias="1.0"
        tools:layout_constraintTop_creator="1"
        tools:layout_constraintRight_creator="1"
        tools:layout_constraintBottom_creator="1"
        tools:layout_constraintLeft_creator="1"/>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="51dp">

        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginEnd="66dp"
            android:layout_marginStart="66dp"
            android:gravity="center"
            android:text="@string/login_welcome_braigolabs"                android:textAppearance="@style/TextAppearance.AppCompat.Large"
            tools:layout_editor_absoluteX="93dp"
            tools:layout_editor_absoluteY="403dp"/>

        <Button
            android:id="@+id/login_button"
            style="@style/Widget.AppCompat.Button.Colored"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:elevation="2dp"
            android:text="@string/login_login_button_title"
            android:textAllCaps="false"
            tools:layout_editor_absoluteX="116dp"
            tools:layout_editor_absoluteY="543dp"/>
    </LinearLayout>
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

还想知道ConstraintLayout开发者中有多受欢迎?

android android-constraintlayout

23
推荐指数
2
解决办法
1万
查看次数

使用ConstraintLayout中的组来侦听多个视图上的单击事件

基本上我想将一个OnClickListener附加到ConstraintLayout中的多个视图.

在迁移到ConstraintLayout之前,我可以添加一个监听器的一个布局内的视图.现在,它们与ConstraintLayout下的其他视图位于同一层.

我尝试将视图添加到a android.support.constraint.Group并以编程方式向其添加了OnClickListener.

group.setOnClickListener {
    Log.d("OnClick", "groupClickListener triggered")
}
Run Code Online (Sandbox Code Playgroud)

但是,从ConstraintLayout版本开始,这似乎不起作用 1.1.0-beta2

我做错了什么,有没有办法实现这种行为或者我是否需要将监听器附加到每个单一视图?

android kotlin android-constraintlayout

23
推荐指数
4
解决办法
1万
查看次数

Travis CI构建不适用于Android Constraint Layout

我想让Travis构建我的Android项目.它尝试下载库时失败ConstraintLayout.你知道我要做些什么才能让它发挥作用吗?

我的.travis.yml是这样的:

language: android
jdk:
  - oraclejdk8
android:
  components:
    - platform-tools
    - tools
    - build-tools-23.0.2
    - android-23
    - extra-android-support
    - extra-android-m2repository
    - extra-google-m2repository
Run Code Online (Sandbox Code Playgroud)

build.gradle是:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"
    defaultConfig {
        applicationId "my.example.bdd"
        minSdkVersion 9
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha2'
    testCompile 'junit:junit:4.12'
    androidTestCompile …
Run Code Online (Sandbox Code Playgroud)

android travis-ci android-constraintlayout

22
推荐指数
3
解决办法
7797
查看次数

在DialogFragment中显示ConstraintLayout

我希望你能解决我的问题.我试图谷歌它,并在这里查看主题,但无法找到答案.

我最近改变了我的布局ConstraintLayouts,到目前为止一直很好用.然而我的问题是我有一些DialogFragments显示a LinearLayout,当我改变它时ConstraintLayout我只显示一个褪色的叠加层,但布局中没有元素.如果我将宽度和高度硬编码为类似的东西100dp,它将显示该区域.当我尝试match_parent或任何其他组合时,同样的问题适用.我也尝试将高度和宽度设置为设备的高度和宽度,但仍然没有运气.

在我的CreateWeddingMetadataFragment中的onCreateView中,我有:

createButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d(TAG, "Show message dialog");

            FragmentManager fm = getFragmentManager();
            CreateWeddingMetadataDialogFragment welcomeMessageDialog = new CreateWeddingMetadataDialogFragment();
            welcomeMessageDialog.show(fm, "metadate_fragment_dialog");
            welcomeMessageDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
                @Override
                public void onDismiss(DialogInterface dialog) {
                }
            });
Run Code Online (Sandbox Code Playgroud)

在我的CreateWeddingMetadataFragmentDialog中,我有:

public class CreateWeddingMetadataDialogFragment extends DialogFragment{

private static final String TAG = CreateWeddingMetadataDialogFragment.class.getSimpleName();

public Button setupNow, setupLater;
public TextView mTest;
public ConstraintLayout parentLayout;

private DialogInterface.OnDismissListener onDismissListener;



public void setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) …
Run Code Online (Sandbox Code Playgroud)

android android-dialogfragment android-constraintlayout

22
推荐指数
1
解决办法
4164
查看次数

如何让 View 填充 ConstraintsLayout 中的剩余空间

如何让ViewFrameLayout 填充所有剩余空间ConstraintLayout

我有像这样的 xml:

<ImageView
    android:background="#FF0000"
    android:id="@+id/header"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_header"
    android:scaleType="fitXY"
    android:adjustViewBounds="true"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHeight_default="wrap"
    app:layout_constraintWidth_default="spread"/>
<FrameLayout
    android:background="#00FF00"
    app:layout_constraintHeight_default="spread"
    app:layout_constraintWidth_default="wrap"
    app:layout_constraintTop_toBottomOf="@id/header"
    app:layout_constrainedHeight="true"
    app:layout_constraintBottom_toTopOf="@id/footer"
    android:id="@+id/task_fragment"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
<LinearLayout
    android:background="#FFFF00"
    android:orientation="vertical"
    android:id="@+id/footer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHeight_default="spread"
    app:layout_constraintWidth_default="spread"
    app:layout_constraintBottom_toBottomOf="parent">
    <ImageButton
        style="?borderlessButtonStyle"
        android:id="@+id/btn_ar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:padding="0dp"
        android:scaleType="fitXY"
        android:adjustViewBounds="true"
        android:src="@drawable/ic_ar"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

有页眉、页脚和FrameLayout中间我想FrameLayout填充所有剩余空间。

我不明白,我必须使用哪些属性来扩展FrameLayout. 请帮我!

编辑:或任何具有不同布局的解决方案。

android android-constraintlayout

22
推荐指数
3
解决办法
1万
查看次数

在Constraint布局中将RecyclerView的高度设置为"wrap_content"

我正在尝试在wrap_content上设置回收器视图的高度并使其尊重,但它将超过布局上的其他窗口小部件.我现在能做什么?

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/white">



    <TextView
        android:id="@+id/tvPastRounds"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="0dp"
        android:text="Past Rounds"
        android:textColor="@color/text_color_black"
        android:textSize="16sp"
        app:layout_constraintLeft_toLeftOf="parent"/>
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginBottom="24dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="16dp"
        android:clipChildren="true"
        android:maxHeight="150dp"

        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintLeft_toLeftOf="@+id/tvPastRounds"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tvPastRounds" app:layout_constraintVertical_bias="0.0"/>
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

android android-recyclerview android-constraintlayout

21
推荐指数
2
解决办法
1万
查看次数

如何使用ConstraintLayout查看"wrap_content但不大于"?

我连续3个视图:标题,版本和imageview(作为按钮工作):

  1. 标题应该是wrap_content尊重以下规则
  2. 版本应该是wrap_content标题的右侧和imageview的左侧
  3. imageview具有固定大小,位于父级的右上角

在此输入图像描述

问题是如果标题太大,版本移动到右边并且规则"版本在imageview左侧"不受尊重:

在此输入图像描述

所以我需要限制标题宽度并使版本可见而不是向右移动.

这是XML:

<?xml version="1.0" encoding="utf-8"?>
<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:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:background="#b3b2b2">

    <!--  -->
    <TextView
        android:id="@+id/LibraryWithVersionItem.title"
        android:layout_width="0dp"
        android:textStyle="bold"
        android:textSize="@dimen/fontSize18"
        android:textColor="@color/mySecondaryDarkColor"
        android:layout_height="wrap_content"
        android:ellipsize="middle"
        tools:text="ExampleLibrary 01234567890123456789012345"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="8dp"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent"
        />

    <Spinner
        android:id="@+id/LibraryWithVersionItem.versions"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:textSize="@dimen/fontSize16"
        android:textColor="@color/mySecondaryDarkColor"
        tools:listitem="@layout/library_version"
        android:layout_marginTop="@dimen/margin8"
        android:layout_marginLeft="@dimen/margin8"
        android:layout_marginRight="@dimen/margin8"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toRightOf="@+id/LibraryWithVersionItem.title"
        app:layout_constraintRight_toLeftOf="@+id/LibraryWithVersionItem.info"
        app:layout_constraintHorizontal_bias="0.0"/>

    <TextView
        android:id="@+id/LibraryWithVersionItem.sentence"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toBottomOf="@id/LibraryWithVersionItem.title"
        tools:text="Some library description in one sentence\nbut two lines"
        android:layout_marginTop="@dimen/margin8"
        android:layout_marginLeft="@dimen/margin8"
        app:layout_constraintRight_toLeftOf="@+id/LibraryWithVersionItem.install"
        android:layout_marginRight="8dp"
        app:layout_constraintHorizontal_bias="0.0"/>

    <TextView
        android:id="@+id/LibraryWithVersionItem.isInstalled"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="@string/LibraryManager.installed"
        android:textColor="#1a7c1a"
        android:layout_marginTop="@dimen/margin8"
        android:layout_marginBottom="@dimen/margin8" …
Run Code Online (Sandbox Code Playgroud)

android android-constraintlayout

21
推荐指数
2
解决办法
1万
查看次数

app:layout_marginBottom与android约束布局不兼容

是否有任何理由为什么以下layout_marginBottom不起作用?但是,如果我在第二个视图上使用layout_marginTop,它确实可以正常工作

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ade4ad">
    <TextView
        android:id="@+id/first"
        android:layout_width="90dp"
        android:layout_height="40dp"
        app:layout_marginBottom="10dp"
        android:background="#000"/>
    <TextView
        android:id="@+id/second"
        android:layout_width="90dp"
        android:layout_height="40dp"
        android:background="#fff"
        app:layout_constraintTop_toBottomOf="@+id/first"/>
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

android margin android-constraintlayout

21
推荐指数
4
解决办法
6270
查看次数

如何在约束布局中叠加视图?

我有我的登录活动的这种布局.我想覆盖progressBar,就像它可以使用FrameLayout.怎么用这个ConstraintLayout

<layout>

    <data>

        <variable
            name="vm"
            type="com.app.android.login.vm" />
    </data>

    <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:fillViewport="true"
        tools:context="com.app.android.login.LoginActivity"
        tools:ignore="missingPrefix">

        <android.support.constraint.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="@dimen/default_view_margin_bottom_8dp">

            <android.support.design.widget.TextInputLayout
                android:id="@+id/til_login_email"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginEnd="@dimen/default_view_margin_right_8dp"
                android:layout_marginStart="@dimen/default_view_margin_left_8dp"
                android:textColorHint="@color/colorSecondaryText"
                app:hintTextAppearance="@style/AppTheme.InputLayoutStyle"
                app:layout_constraintBottom_toTopOf="@+id/til_login_password"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_chainStyle="packed">

                <android.support.design.widget.TextInputEditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/login_email"
                    android:imeOptions="actionNext"
                    android:singleLine="true"
                    android:text="@={vm.emailField}"
                    android:textColor="@color/colorPrimaryText" />
            </android.support.design.widget.TextInputLayout>

            <android.support.design.widget.TextInputLayout
                android:id="@+id/til_login_password"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginEnd="@dimen/default_view_margin_right_8dp"
                android:layout_marginStart="@dimen/default_view_margin_left_8dp"
                android:textColorHint="@color/colorSecondaryText"
                app:hintTextAppearance="@style/AppTheme.InputLayoutStyle"
                app:layout_constraintBottom_toTopOf="@+id/btn_login_login"
                app:layout_constraintTop_toBottomOf="@+id/til_login_email"
                app:layout_constraintVertical_chainStyle="packed">

                <android.support.design.widget.TextInputEditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/login_password"
                    android:imeOptions="actionDone"
                    android:inputType="textPassword"
                    android:singleLine="true"
                    android:text="@={vm.passwordField}"
                    android:textColor="@color/colorPrimaryText" />
            </android.support.design.widget.TextInputLayout>

            <Button
                android:id="@+id/btn_login_login"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginEnd="@dimen/default_view_margin_right_8dp"
                android:layout_marginStart="@dimen/default_view_margin_left_8dp"
                android:layout_marginTop="48dp"
                android:onClick="@{vm::login}"
                android:text="@string/login_btn_text"
                android:textColor="@color/colorWhite" …
Run Code Online (Sandbox Code Playgroud)

android android-constraintlayout

21
推荐指数
4
解决办法
1万
查看次数