Мои кнопки не размещаются внизу в моем приложении, независимо от моего макета или ограничений - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь, чтобы мои две кнопки, «Добавить» и «Удалить», отображались в нижней части экрана в этом фрагменте. Теперь я позже буду использовать этот фрагмент рядом с другим, чтобы отобразить их рядом, но это более поздняя проблема, и я надеюсь, что то, что я решу отсюда, не вызовет проблем в будущем

Я использую limitintLayoutlayout_Constraint, чтобы попытаться разместить их внизу. Ранее я использовал FrameLayout, RelativeLayout и LinearLayout, чтобы справиться с этим, но безрезультатно. Кто-нибудь еще из вас мог бы порекомендовать?

activity_main.xml:

   <?xml version="1.0" encoding="utf-8"?>
   <androidx.constraintlayout.widget.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:context=".MainActivity">

    <fragment
    android:id="@+id/fragment"
    android:name="com.example.contactslist.main"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    />

    </androidx.constraintlayout.widget.ConstraintLayout>

frag_main.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout
    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"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".main">

<!-- TODO: Update blank fragment layout -->
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Contacts"
    android:textSize="30sp"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    >
</TextView>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <ListView
        android:id="@+id/contact_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
    </ListView>

</LinearLayout>

<Button
    android:id="@+id/delete_contacts"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:text="Delete"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    >
</Button>

<Button
    android:id="@+id/add_contacts"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:text="Add"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    >
</Button>

 </androidx.constraintlayout.widget.ConstraintLayout>

На моей вкладке «Дизайн» это отображаетсяправильно, с кнопками внизу. Но не в моем реальном приложении, где оно показывает их сверху, хотя все еще ориентировано вправо или влево, как и должно быть. Буду признателен за любую помощь

РЕДАКТИРОВАТЬ: Я думаю, что я мог решить проблему с использованием match_parent в моем файле frag.xml и придерживался ConstrainLayout. Но, интересно, это вызовет у меня проблемы в будущем, например, когда мне нужно разместить два фрагмента рядом или нужно будет передавать информацию между фрагментами? Я, честно говоря, не уверен, как справиться с последующим

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Попробуйте этот линейный макет для фрагмента. Это подходит для любого экрана, так как я использовал вес. Мне обычно не нравится макет Consraint, так как усложняет использование всех ограничений для адаптивного макета.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:background="#202020"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
    android:layout_marginTop="10dp"
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:text="Contacts"
    android:layout_weight="0.7"
    android:textColor="#fff"
    android:textSize="30sp"/>
    <ListView
        android:id="@+id/contact_list"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="5"/>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:orientation="horizontal"
    android:gravity="center">
<Button
    android:id="@+id/delete_contacts"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Delete"
  />
<Button
    android:id="@+id/add_contacts"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:text="Add"
/>
</LinearLayout>
</LinearLayout>
0 голосов
/ 09 октября 2019

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

...