Android — Как выровнять текст в TextView

#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!