#android #android-layout
#Android #android-макет
Вопрос:
У меня есть следующее layout
для ListView
элемента:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:padding="5dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@ id/item_icon_image"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:src="@drawable/m" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Business Name"
android:id="@ id/item_title_text"
android:layout_toRightOf="@ id/item_icon_image"
android:layout_marginLeft="3dp"
android:textStyle="bold"
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_alignTop="@ id/item_icon_image" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Distance"
android:id="@ id/item_distance_text"
android:layout_alignLeft="@ id/item_title_text"
android:layout_alignBottom="@ id/item_icon_image" />
</RelativeLayout>
И это отображаемый результат:
Как вы можете видеть, между реальным текстом и нижней частью изображения есть пробел… Я ожидал, что нижняя часть текста будет точно соответствовать нижней части image…so вопрос в том, как я могу выровнять текст по нижней части изображения?
(это также происходит для верхнего текста, но вместо этого вверху)
Редактировать:
На данный момент я использую:
android:layout_marginBottom="-10dp"
Но я хотел что-то более автоматическое, какое-то решение, которое не будет зависеть от dp или экрана …. но, как указано, это может быть невозможно, потому что View
необходимо освободить место для таких букв, как ‘y’, ‘g’ и ‘j’ …. но я хотел бы, чтобы было что-то, что выровняло бы его на основе содержимого, поэтому, если бы не было ‘g’, это не сэкономило бы это пространство.
Комментарии:
1. Если вы измените нижнее слово на что-нибудь с буквами y или g, это может помочь вам понять, почему выравнивание не является идеальным. В противном случае вы всегда можете использовать
android:layout_marginTop
иandroid:layout_marginBottom
для перемещения текста вручную, если он статичен.2. Ну, это имеет смысл для ‘y’ ‘j’ ‘g’… но все же есть верхняя часть, которую я могу полностью заполнить, я перепробовал все заглавные буквы и ударения.
3. поместите ImageView и TextView внутри RelativeLayout. Установите параметр RelativeLayout height в значение wrap_content, а затем в ImageView и TextView установите android:layout_alignParentBottom в значение true. И не забудьте установить android:layout_tolefto в TextView с идентификатором ImageView.
4. @Varundroid тоже не работает :/
Ответ №1:
Вы должны добавить android:gravity="top"
в верхний текстовый вид и android:gravity="bottom"
в нижний текстовый вид, чтобы получить желаемый результат.
Ответ №2:
Попробуйте этот способ, надеюсь, это поможет вам решить вашу проблему.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp">
<ImageView
android:id="@ id/item_icon_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@ id/item_title_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Business Name"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textStyle="bold" />
<View
android:layout_width="1dp"
android:layout_height="odp"
android:layout_weight="1"/>
<TextView
android:id="@ id/item_distance_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Distance"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
</LinearLayout>
Комментарии:
1. Это просто меняет ситуацию, я хотел что-то, что не будет зависеть от экрана, что-то автоматическое …. сейчас я использую
android:layout_marginBottom="-10dp"
, который делает то же самое
Ответ №3:
Сделайте это следующим образом, чтобы достичь желаемого результата:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Distance"
android:id="@ id/item_distance_text"
android:layout_alignLeft="@ id/item_title_text"
android:layout_alignBottom="@ id/item_icon_image"
android:gravity="bottom" />
Комментарии:
1. попробуйте задать верхний предел 5dp
2. Да, это мое текущее решение …. но я хотел что-то, что не будет зависеть от мер
3. попробуйте использовать линейный макет с вертикальной ориентацией и установите weightsum = 2, затем присвоите weight = 1 каждому текстовому представлению, чтобы оно занимало 50 на 50 от общей высоты, это не потребует вашего dp!