#android #xml #android-relativelayout
#Android #xml #android-relativelayout
Вопрос:
У меня есть корневые RelativeLayout
и дочерние представления.
После некоторого просмотра V1 я хочу разместить 3 просмотра: TextView
TV1, TextView
TV2 и ProgressBar
Progress. Конечно, прогресс имеет высоту больше, чем текстовые представления. После этого 3 вида разместили другие представления.
Как я могу разместить TV1, TV2, прогресс с «центральной» линией? Без использования какого-либо дополнительного контейнера, например: LinearLayout
.
Комментарии:
1. Вы можете присвоить своим представлениям
android:centerVertical="true"
атрибут2. почему вам не нужен контейнер? Я думаю, что вложенные макеты — это всегда хороший подход
3. @Carlos Robless, я думаю: меньше контейнеров, меньше затрат на рендеринг.
4. в любом случае, это лучшее, что вы можете сделать. Если вы все еще не хотите, вы можете вычислить высоту 3 элементов во время выполнения и добавить нужное поле программно
5. Вы пробовали что-то вроде: android:layout_alignBaseline=»@id / progress» или наоборот?
Ответ №1:
Выберите эталонное представление (скажем, ProgressBar в вашем случае) и выровняйте другие представления относительно его верхней И нижней части. Таким образом, они станут центрированными относительно его горизонтальной оси.
android:layout_alignTop ="@ id/reference_progressbar_id"
android:layout_alignBottom ="@id/reference_progressbar_id"
Ответ №2:
Шаг 1 Создайте, LinearLayout
который содержит эти три вида, и установите android:gravity="center"
для linearlayout, подобного следующему
<LinearLayout
android:id="@ id/action_header_RL"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="123"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="456"/>
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
Комментарии:
1. спасибо, я уже знаю об этой реализации. Но я хочу использовать только корневой RelativeLayout.
2. @YShinkarev Используйте RelativeLayout как root, но внутри этого вы можете использовать LinearLayout, содержащий эти три представления.
Ответ №3:
Добавьте android:centerVertical="true"
к видам, которые вы хотите центрировать, но это не гарантирует, что они не будут перекрывать любые другие виды, которые вы добавляете в макет.
Ответ №4:
сохраните это свойство с помощью tv1, tv2 и progress
< android:layout_centerVertical=»true»>
и сохранить tv1 android:layout_alignParentLeft=»true»
и tv2 to_Rightof tv1, а прогресс продолжается до_RightOf tv2
Комментарии:
1. @Mahmoud Elmorabea, @Frank N. Stein не работают,
android:centerVertical
потому что я используюlayout_below
(ниже версии V1).
Ответ №5:
Try This Below Code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@ id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center" >
<TextView
android:id="@ id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ANDROID"
android:layout_toLeftOf="@id/TextViewValue" />
<TextView
android:id="@ id/TextViewValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Layout" />
<ProgressBar
android:id="@ id/progressBar1"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/TextViewValue" />
</RelativeLayout>
Комментарии:
1. проблема вашего кода в том, что вы не используете представления выше / ниже TV / Progress.