Android - установить ширину родительского линейного макета в процентах от экрана

Добрый день. Извиняюсь за запутанный заголовок.

Я строю приложение для Android, и у меня есть фрагмент диалога. Фрагмент диалога имеет заданную ширину. Однако проблема заключается в том, что когда приложение запускается на устройстве с другим размером экрана, фрагмент диалога не центрируется должным образом.

Изначально, что у меня было:

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

  <-- code goes here -->

</RelativeLayout>

Как вы можете видеть, у меня есть относительный размер с определенной шириной. Поскольку я знаю, что вы не можете использовать layout_weight в относительном макете я обернул родительский относительный макет в линейный макет как таковой:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="0.8"
    android:weightSum="1">

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

    </RelativeLayout>
</LinearLayout>

Однако это не работает, поскольку фрагмент диалога обрезается, когда я запускаю приложение на устройстве с меньшим размером экрана.

Как установить ширину фрагмента диалога в процентах от размера экрана? Возможно ли это вообще или мне придется прибегнуть к программной настройке?

Любая помощь очень ценится, спасибо.

3 ответа

Решение

Это правильный путь, если вы хотите, чтобы RelativeLayout имел ширину экрана 40%, но этот метод не может применяться к родительскому макету, потому что родительский макет не имеет родительского макета и android:layout_weight не влияет

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="100">

<RelativeLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="40">

</RelativeLayout>

Поскольку я знаю, что вы не можете использовать layout_weight в относительном макете

Мы можем использовать layout_weight в любом представлении и макете, если он является прямым потомком LinearLayout

С новой библиотекой поддержки процентов теперь вы можете использовать PercentRelativeLayout,

Проверьте эту ссылку

Приведенный ниже код сделает относительный макет 1/2 родительского и расположит его горизонтально по центру:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal">

    <RelativeLayout
        android:layout_width="0dp"
        android:layout_weight="0.5"
        android:layout_height="wrap_content">

    </RelativeLayout>
</LinearLayout>

Надеюсь, поможет.

Другие вопросы по тегам