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>
Надеюсь, поможет.