Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android add other layout in ConstraintLayout using include tag

I'm making a simple test app using ConstraintLayout, but I have a problem.

Here is my code:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <layout 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.support.constraint.ConstraintLayout     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:context="com.example.user.myapplication.activity.MainActivity">      <Button         android:id="@+id/btn_launch"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_marginEnd="8dp"         android:layout_marginTop="16dp"         android:text="launch"         app:layout_constraintHorizontal_bias="1.0"         app:layout_constraintLeft_toLeftOf="parent"         app:layout_constraintRight_toRightOf="parent"         app:layout_constraintTop_toTopOf="parent" />      <TextView         android:id="@+id/text_view"         android:layout_width="100dp"         android:layout_height="50dp"         android:layout_marginEnd="16dp"         android:layout_marginTop="16dp"         android:text="Hello World!"         app:layout_constraintHorizontal_bias="1"         app:layout_constraintLeft_toLeftOf="parent"         app:layout_constraintRight_toRightOf="parent"         app:layout_constraintTop_toBottomOf="@+id/btn_launch" />      <include         layout="@layout/content_main"         app:layout_constraintBottom_toBottomOf="parent"         app:layout_constraintLeft_toLeftOf="parent"         app:layout_constraintRight_toRightOf="parent"         app:layout_constraintTop_toBottomOf="@+id/text_view" />  </android.support.constraint.ConstraintLayout> 

content_main.xml

<?xml version="1.0" encoding="utf-8"?> <layout 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.support.constraint.ConstraintLayout     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:orientation="vertical">      <TextView         android:id="@+id/textView2"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_marginTop="8dp"         android:text="123456"         app:layout_constraintLeft_toLeftOf="parent"         app:layout_constraintRight_toRightOf="parent"         app:layout_constraintTop_toTopOf="parent" />      <TextView         android:id="@+id/textView3"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_marginLeft="8dp"         android:layout_marginRight="8dp"         android:layout_marginTop="8dp"         android:text="98765"         app:layout_constraintLeft_toLeftOf="parent"         app:layout_constraintRight_toRightOf="parent"         app:layout_constraintTop_toBottomOf="@+id/textView2" />      <TextView         android:id="@+id/textView"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_marginLeft="8dp"         android:layout_marginRight="8dp"         android:layout_marginTop="8dp"         android:text="abc"         app:layout_constraintLeft_toLeftOf="parent"         app:layout_constraintRight_toRightOf="parent"         app:layout_constraintTop_toBottomOf="@+id/textView3" />  </android.support.constraint.ConstraintLayout> 

Code result

Problem

I want "content_main" to be under the "Hello world!" TextView.

I using RelativeLayout, LinearLayout, ConstraintLayout at "content_main" element, but they do not not work.

I don't find any solution.

Does the Android "include" tag not work with ConstraintLayout?

like image 550
BlueBright Avatar asked Apr 26 '17 05:04

BlueBright


People also ask

Is it possible to include one layout definition in another?

To efficiently re-use complete layouts, you can use the <include/> and <merge/> tags to embed another layout inside the current layout. Reusing layouts is particularly powerful as it allows you to create reusable complex layouts.

How can use multiple layouts in one activity in Android?

You can use as many layouts as possible for a single activity but obviously not simultaneously. You can use something like: if (Case_A) setContentView(R. layout.

Can we use linear layout in ConstraintLayout?

You can create linear layouts now with ConstraintLayout by constraining the sides of each element with each other. The quick way of creating these layouts is to select all the views together and right click to center horizontally or vertically.


2 Answers

Android include tag does work with ConstraintLayout, but you need to declare how big is the layout you want to include with the following attributes.

<include      layout="@layout/content_main"      android:layout_width="100dp"      android:layout_height="250dp"      .../> 

For included layout having dynamic height use wrap_content as a value in layout_height or layout_width attributes of include tag.

<include     android:id="@+id/input_include"     layout="@layout/task_input"     android:layout_width="match_parent"     android:layout_height="wrap_content"/> 

After that, your constraints should work.

like image 71
Maciej Beimcik Avatar answered Sep 20 '22 02:09

Maciej Beimcik


In the constrain layout define the height and width and your constraints as follows:

<include     app:layout_constraintTop_toBottomOf="@id/custom_members_toolbar_layout"     app:layout_constraintBottom_toTopOf="@id/file_xfer_bottom_nav_bar"     android:layout_height="0dp"     android:layout_width="match_parent"     layout="@layout/file_xfer_upload_layout"/> 

This will auto resize the height based on your constraints.

Cheers!

like image 27
Derwrecked Avatar answered Sep 23 '22 02:09

Derwrecked