Android using Linear layout maxWidth, not work with fill_parent-ThrowExceptions

Exception or error:

When using fill_parent, maxWidth has no effect.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">
    <LinearLayout android:layout_width="fill_parent"
                  android:layout_height="match_parent"
                  android:orientation="vertical">
        <EditText android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:maxWidth="50dip"/>
    </LinearLayout>    
</LinearLayout>
How to solve:

The attribute maxWidth has no effect on a width of match_parent (or the deprecated fill_parent), they are mutually exclusive. You need to use wrap_content.

Also any layout that only has one child can probably be removed, for instance you can simplify you current layout to:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:maxWidth="50dip"/>

###

You can achieve the same effect using different layouts for different screens. Say you want your EditText to fill the available width but not more than 480dp. Difine your layouts as follows:

layout/my_layout.xml:

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

layout-w480dp/my_layout.xml: (choose you max width as the qualifier here)

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="480dp"
          android:layout_height="wrap_content"/>

###

If anyone wants the combined behaviour of match_parent and maxWidth in a single parent layout: You can use a ConstraintLayout and
constrain the child by the parent bounds combined with layout_constraintWidth_max.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText 
        android:layout_width="0dp"
        android:layout_height="wrap_content"                
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintWidth_max="480dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>

Leave a Reply

Your email address will not be published. Required fields are marked *