ConstraintLayout和TextView wrap_content问题

时间:2016-09-28 09:03:55

标签: android android-constraintlayout

由于我已更新到Android Studio 2.2并开始在新的UI Builder中使用ConstraintLayout,因此存在一个我无法解决的问题。

我在ImageView右侧有TextViewImageView的简单布局。 TextView中的文本从服务器动态更新(我不知道该文本的确切长度)。我希望TextView使用ImageView和屏幕右侧之间的所有可用空间。我使用RelativeLayout早期     TextView android:layout_width="wrap_content" 它起作用了:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="116dp"
        android:layout_height="178dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="16dp"
        tools:src="@drawable/pets"/>

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/imageView"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_toEndOf="@+id/imageView"
        android:layout_toRightOf="@+id/imageView"
        tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque molestie tincidunt mi a gravida. Aenean faucibus a sapien ut consequat. Praesent sed placerat quam."/>
</RelativeLayout>

RelativeLayout (ScreenShot)

但是当我使用ConstraintLayout时,没有textwrap,而TextView也不在屏幕之外。

<?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"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="116dp"
        android:layout_height="178dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="16dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/pets"/>

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="16dp"
        android:ellipsize="none"
        android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque molestie tincidunt mi a gravida. Aenean faucibus a sapien ut consequat. Praesent sed placerat quam."
        app:layout_constraintLeft_toRightOf="@+id/imageView"
        app:layout_constraintTop_toTopOf="parent"/>
</android.support.constraint.ConstraintLayout>

ConstraintLayout (ScreenShot)

3 个答案:

答案 0 :(得分:2)

选择与match_constraints(0dp)类似的wrap_content。含义

<TextView
    android:id="@+id/textView"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginLeft="16dp"
    android:layout_marginTop="16dp"
    android:ellipsize="none"
    android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque molestie tincidunt mi a gravida. Aenean faucibus a sapien ut consequat. Praesent sed placerat quam."
    app:layout_constraintLeft_toRightOf="@+id/imageView"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"/>

这意味着您的布局会根据您设置的限制包装内容。

答案 1 :(得分:1)

您使用的是哪种版本的ConstraintLayout? alpha 8有一个与之相关的回归。尝试更新到alpha 9(如果你看到异常,不要忘记重新启动工作室和/或使缓存无效),这应该可以解决你的问题。

答案 2 :(得分:-1)

尝试以下

var myApp = angular.module('myApp',[]);
myApp.controller('myCtrl',['$scope',function($scope){

    $scope.tableData = ['hello','blue','angular'];

    //set ture ok but only first time
    //设置 true 可以 但是 只有第一次可以
    //$scope.selectClass = true;


    $scope.reset = function(){
        console.log('reset');
        $scope.selectClass = false;
    }

}]).directive('myTd',function(){
    return {
        restrict : 'A',
        link : function(scope,elem){
            $(elem).on('click',function(){
                if($(this).hasClass('selected')){
                    $(this).removeClass('selected')
                }else{
                    $(this).addClass('selected');
                }
            })
        }
    }
});