Я разработал два макета Android, которые должны быть показаны по порядку. Таким образом, первый макет должен отображаться вверху страницы, а второй макет должен отображаться внизу страницы. Однако следующий код показывает только первый макет. Как мне показать и второй макет?

Основной макет

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include layout="@layout/first_layout"/>
    <include layout="@layout/second_layout"/>

</LinearLayout>

Первый макет xml - это

<LinearLayout 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"   
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="net.simplifiedcoding.androidloginapp.UserProfile">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/textView3"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
</LinearLayout>

Второй макет

<LinearLayout 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"    
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:orientation="vertical"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"      
    tools:context=".MainActivity">
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Name"
    android:id="@+id/textView" />

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/editTextName" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Address"
    android:id="@+id/textView2" />

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/editTextAddress" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Insert"
    android:onClick="insert"
    android:id="@+id/button" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textViewResult" />
</LinearLayout>
11
Mohammad Ali Nematollahi 22 Фев 2016 в 05:30

3 ответа

Лучший ответ

Я еще не уверен, решит ли это вашу проблему, но можете ли вы попробовать добавить android:layout_width и android:layout_height во включенный макет, а также вес макета?

<include layout="@layout/first_layout"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"/>

<include layout="@layout/second_layout"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"/>

Добавленная информация

Причина, по которой у вас возникла эта проблема, заключается в том, что оба ваших макета используют match_parent для высоты. Это означает, что в первом макете он будет соответствовать размеру родительского (который в данном случае представляет собой весь экран), таким образом, первый макет будет занимать весь экран, а второй макет не появится.

В этом решении вы указываете обоим макетам занимать только половину экрана с помощью layout_weight.

10
hehe 22 Фев 2016 в 02:59

В вашем первом макете у вас есть

android:layout_height="match_parent"

Поэтому он занимает всю высоту вашего основного макета. Измените это на

android:layout_height="wrap_content"

И тебе должно быть хорошо.

Как я могу это сделать??

Корневой вид должен быть именно таким, каким вы хотите, чтобы он отображался в каждом макете, в который вы добавляете этот макет.

Обратите внимание, что

Вы также можете переопределить все параметры макета (любые атрибуты android:layout_*) корневого представления включенного макета, указав их в теге <include/>.

5
Mr Lister 28 Фев 2016 в 09:58

Вы должны использовать RelativeLayout в своем основном макете. Если вы используете LinearLayout, один элемент всегда будет отображаться под предыдущим элементом, а поскольку оба ваших макета соответствуют match_parent, второй отображаться не будет.

1
Gabriel Brito 25 Дек 2016 в 17:59