skip to Main Content

There is a ConstraintLayout layout:

<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">

    <Button
        android:id="@+id/button10"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:singleLine="true"
        android:text="small text"
        app:layout_constraintLeft_toLeftOf="parent"/>

    <Button
        android:ellipsize="end"
        android:singleLine="true"
        android:id="@+id/button11"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="small text"
        app:layout_constraintRight_toRightOf="parent"/>

</android.support.constraint.ConstraintLayout>

It is displayed like this:
введите сюда описание изображения
Now is Ok, but if i change
android:text="small text" to android:text="big teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeext" then views will overlap each other..

I’m need to make sure that with a small text there is a “wrap content”, as I actually did on the screenshot above, but with a larger text, the text views must occupy a maximum of about 40 percent horizontally of the parent. Well also that the text was not transferred – I do android: ellipsize =" end " and android: singleLine =" true.

This is how it should be (edited in Photoshop for demonstration):
введите сюда описание изображения
How do this with ConstraintLayout or if can’t – with others layouts?

5

Answers


  1. You can do like this :

    <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"
           android:layout_height="match_parent">
    
    <Button
        android:id="@+id/button10"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:ellipsize="end"
        android:maxLines="1"
        android:gravity="center_vertical"
        android:text="small text"
        android:layout_marginRight="20dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/button11"
        app:layout_constraintTop_toTopOf="parent" />
    
    <Button
        android:id="@+id/button11"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:maxLines="1"
        android:layout_marginLeft="20dp"
        android:gravity="center_vertical"
        android:text="small textsfdgdfjkghkdfhgjkdfhgkhgkhkjjkgfkgjkfgjkgjkjgfdkj"
        app:layout_constraintLeft_toRightOf="@+id/button10"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="@+id/button10" />
    

    Login or Signup to reply.
  2. you can also do it using Guideline and layout_constraintWidth_default property as in below example

    <?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"
        android:layout_height="match_parent"
        tools:showIn="@layout/activity_home">
    
    
        <Button
            android:id="@+id/button10"
            android:layout_width="0dp"
            app:layout_constraintWidth_default="wrap"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:singleLine="true"
            android:text="sdtessdsdsdsdsdsdsdsddsdsdxt"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginLeft="0dp"
            app:layout_constraintHorizontal_bias="0"
            android:layout_marginTop="8dp"
            app:layout_constraintRight_toLeftOf="@+id/guideline"
            android:layout_marginRight="8dp" />
    
        <Button
            android:ellipsize="end"
            android:singleLine="true"
            android:id="@+id/button11"
            android:layout_width="0dp"
            app:layout_constraintWidth_default="wrap"
            android:layout_height="wrap_content"
            android:text="ddddddsdssdsdsdsdsdsdddt"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginTop="8dp"
            android:layout_marginRight="-1dp"
            android:layout_marginLeft="8dp"
            app:layout_constraintHorizontal_bias="1"
            app:layout_constraintLeft_toLeftOf="@+id/guideline" />
    
        <android.support.constraint.Guideline
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/guideline"
            android:orientation="vertical"
            app:layout_constraintGuide_percent="0.5" />
    
    </android.support.constraint.ConstraintLayout>
    
    Login or Signup to reply.
  3. The following attribute works:

    app:layout_constrainedWidth="true"
    

    https://developer.android.com/reference/android/support/constraint/ConstraintLayout

    WRAP_CONTENT : enforcing constraints (Added in 1.1)
    If a dimension is set to WRAP_CONTENT, in versions before 1.1 they will be treated as a literal dimension — meaning, constraints will not limit the resulting dimension. While in general this is enough (and faster), in some situations, you might want to use WRAP_CONTENT, yet keep enforcing constraints to limit the resulting dimension. In that case, you can add one of the corresponding attribute:

    app:layout_constrainedWidth=”true|false”
    app:layout_constrainedHeight=”true|false”

    Login or Signup to reply.
  4. If constraint is from left/right

        set vertical guideline
        set component layout_width = 0dp
    

    If constraint is from top/bottom

        set horizontal guideline
        set component layout_height = 0dp
    
    Login or Signup to reply.
  5. I would suggest to use a horizontal chain and a ‘app:layout_constraintWidth_percent’.

    The ‘spread_inside’ chain type would make the buttons stick to the parent edges, it’s added on the first button in chain.
    enter image description here

    The guidelines role is performed by the ‘app:layout_constraintWidth_percent’ on each button. It is set to 0.5 on both buttons. This will make each of them occupy maximum half of the available horizontal space.

     <androidx.constraintlayout.widget.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">
    
      <Button
          android:id="@+id/button10"
          android:layout_width="0dp"
          android:layout_height="wrap_content"
          app:layout_constraintWidth_max="wrap"
          app:layout_constraintWidth_percent="0.5"
          android:ellipsize="end"
          android:singleLine="true"
          android:text="bguigui uegerger er ergre greg  gre grefufifu "
          app:layout_constraintHorizontal_chainStyle="spread_inside"
          app:layout_constraintStart_toStartOf="parent"
          app:layout_constraintEnd_toStartOf="@+id/button11"/>
    
      <Button
          android:id="@+id/button11"
          android:layout_width="0dp"
          android:layout_height="wrap_content"
          app:layout_constraintWidth_max="wrap"
          app:layout_constraintWidth_percent="0.5"
          android:ellipsize="end"
          android:singleLine="true"
          android:text="aaa jjjk kkkl"
          app:layout_constraintStart_toEndOf="@+id/button10"
          app:layout_constraintEnd_toEndOf="parent" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search