Ориентация платформы Android в RelativeLayout для пользовательского ListView
Я действительно вытаскиваю свои волосы поверх этого. Некоторые предпосылки. У меня есть список элементов, у которых есть флажки рядом с ними. Когда вы отмените выбор флажка, появится кнопка, позволяющая удалить элемент из списка. Сначала это выглядит наоборот, но мы хотим, чтобы "выбранные" элементы имели право на дальнейшую обработку и т.д. Это мой макет:
<RelativeLayout android:id="@+id/rlBlahBlah"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBox android:text=""
android:id="@+id/cbDeleteItem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:focusable="false"
/>
<TextView android:text=""
android:id="@+id/tvItemText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14dip"
android:paddingLeft="3dip"
android:paddingRight="3dip"
android:paddingTop="13dip"
android:gravity="fill_vertical"
android:layout_toRightOf="@id/cbDeleteItem"
/>
<Button android:layout_height="wrap_content"
android:id="@+id/btnDelete"
android:text="Delete"
android:layout_width="wrap_content"
android:layout_alignParentRight="true"
android:gravity="center_vertical"
android:focusable="false"
/>
</RelativeLayout>
Я не могу заставить 3 элемента центрировать по вертикали в моей строке, чтобы сохранить свою жизнь. layout_gravity
, gravity
, layout_centerVertical
, ничто из этого не работает. Я уверен, что моя проблема - это крошечные настройки, которые можно перевернуть где-нибудь, но я действительно нахожусь на этом.
edit: Я знаю, что textview является "fill_vertical", что некоторые случайные вещи, которые я пытался.
Ответы
Ответ 1
Ваша проблема, вероятно, связана не с макетом, а с тем, как вы раздуваете макет. На самом деле, это может быть даже моя ошибка, в зависимости от того, где вы узнали вашу технику...
Чтобы процитировать вездесущий Romain Guy:
правильное использование inflate() в адаптеры:
надуть (layoutId, parent, false);
Передача родителя (данная вам как параметр в getView()) позволяет пользовательский интерфейс инструментарий для создания соответствующих Объект LayoutParams. Передача ложных говорит, что инструментарий НЕ должен звонить parent.addView(theInflateChild), поскольку ListView сделает свою собственную магию позже на.
Если вы используете inflate(layoutId, null)
, как я традиционно сообщал, жизнь в порядке, если вы не попытаетесь использовать RelativeLayout
в качестве базового макета строк и попытайтесь использовать вертикальное центрирование.
Я буду обновлять свои книги и такие, чтобы отразить новый совет в ближайшие недели.
Ответ 2
Этот атрибут работал у меня, центрируя Button
с помощью RelativeLayout
:
android:layout_centerInParent="true"
Смотрите это сообщение:
Можете ли вы сосредоточить кнопку в RelativeLayout?
Ответ 3
Используя RelativeLayout, мне не повезло с гравитацией или layout_gravity.
Но android:layout_centerVertical="true"
работал у меня, помещенного в дочерний элемент моего RelativeLayout, поэтому вы можете сохранить его, если вам нужно.
Ответ 4
Вот макет, который в итоге сделал именно то, что я хотел. Я удалил RelativeLayout, как только узнал, что он игнорирует атрибуты layout_gravity
(конечно, теперь я не могу найти сообщение). В любом случае, вложенные LinearLayouts сделали трюк для меня:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:id="@+id/llBlahBlahRowMain"
android:padding="6dip">
<CheckBox android:text=""
android:id="@+id/cbDeleteItem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:focusable="false"
/>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:layout_height="wrap_content">
<TextView
android:text="blah blah dynamically replaced text"
android:id="@+id/tvItemText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="14dip"
android:paddingLeft="3dip"
android:layout_gravity="center_vertical"
/>
</LinearLayout>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnDelete"
android:text="Delete"
android:layout_gravity="center_vertical"
android:focusable="false"
/>
</LinearLayout>
Ответ 5
Вы пробовали андроид: gravity = "center_horizontal" в качестве ссылки здесь
Ответ 6
Я сделал альтернативное решение, которое сработало для меня. Я положил на свой элемент textbox свойство android: layout_height = "fill_parent". Таким образом, текстовый элемент заполнил всю строку родителя, поэтому содержимое было правильно выровнено:)
<TextView android:id="@+id/principal_li_descricao"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:layout_marginLeft="10dip"
android:textColor="#ff000000"
android:layout_centerVertical="true"
android:gravity="center_vertical"
android:layout_alignBottom="@+id/principal_li_icone"
android:layout_toRightOf="@+id/principal_li_icone"/>
Спасибо