Android: использование alignBaseline для изображения, следующего за текстом - PullRequest
13 голосов
/ 24 февраля 2011

Ниже приведен TextView, за которым следует ImageView, содержащийся в RelativeLayout. Я пытаюсь привести нижнюю часть изображения в соответствие с базовой линией текста. Когда я использую alignBaseline для изображения, ссылаюсь на TextView, это верхняя часть изображения, которая выравнивается с базовой линией текста, а не с нижней. Как я могу это исправить?

<TextView 
        android:id="@+id/month" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="feb"
        android:textSize="60px"
        android:typeface="serif"
        />
   <ImageView 
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:paddingLeft="15px"
        android:layout_toRightOf="@id/month"
        android:layout_alignBaseline="@id/month"
        android:src="@drawable/minicalimage" 
        android:id="@+id/calimage"
        />

Ответы [ 7 ]

16 голосов
/ 05 августа 2012

С API11 вы можете просто использовать android:baselineAlignBottom="true"

До API11 вы можете перезаписать getBaseLine() и вернуть высоту изображения.

6 голосов
/ 24 января 2016

Вы должны использовать обе следующие строки в вашем ImageView, чтобы выровнять нижнюю часть представления Image к нижней части соседнего TextView:

        android:layout_alignBaseline="@+id/txtview"
        android:baselineAlignBottom="true"

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
    <TextView
        android:id="@+id/txtview"
        ... />

    <ImageView
        ...
        android:layout_toRightOf="@+id/txtview"
        android:layout_alignBaseline="@+id/txtview"
        android:baselineAlignBottom="true"
        ...
        />
</RelativeLayout>
3 голосов
/ 24 февраля 2011

Я смог выполнить то, что хотел. Я не использовал alignBaseline, просто исправил проблему с отступами и изменением размера изображения. Некоторые из проблем, которые у меня возникали, возникли из-за того, что изображение было слишком большим, и оно нежелательно заполняло пространство. Код, который я использовал для достижения того, чего хотел, приведен ниже:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:paddingLeft="25px"
    android:paddingTop="30px"
    android:id="@+id/LinearLayout1">
    <TextView 
        android:id="@+id/month" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="feb"
        android:textSize="60px"
        android:typeface="serif"
        />
   <ImageView 
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_toRightOf="@id/month"
        android:layout_alignBottom="@id/month"
        android:paddingBottom="12px"
        android:src="@drawable/minicalimage" 
        android:id="@+id/calimage"
        />
    <TextView 
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="2011" 
        android:id="@+id/year" 
        android:layout_toRightOf="@id/calimage"
        android:layout_alignBaseline="@id/month"
        android:typeface="serif"
        android:textSize="40px"
        />
</RelativeLayout>

Это был результат:
Header for a calendar/planner

0 голосов
/ 20 июля 2016

Вы хотите использовать атрибут android: layout_alignBottom для выравнивания ImageView с базовой линией другого View.

В приведенном ниже примере я выровнял ImageView с другим TextView.Я включил код для ImageView, а не TextView.Для выравнивания с TextView вам просто нужно включить идентификатор TextView.

Настройка поля или отступа приведет к смещению видов, если пользователь изменит размер текста на своем устройстве.

enter image description here

<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="?attr/selectableItemBackground">

        <!-- additional code here -->

        <ImageView
            android:id="@+id/message_time_chevron_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@id/replies_username_id"
            android:layout_alignParentRight="true"
            android:clickable="true"
            android:src="@drawable/ic_chevron_right"/>

        <!-- additional code here -->

</RelativeLayout>
0 голосов
/ 27 апреля 2015
/**
 * Set whether to set the baseline of this view to the bottom of the view.
 * Setting this value overrides any calls to setBaseline.
 *
 * @param aligned If true, the image view will be baseline aligned with
 *      based on its bottom edge.
 *
 * @attr ref android.R.styleable#ImageView_baselineAlignBottom
 */
public void setBaselineAlignBottom(boolean aligned) {
    if (mBaselineAlignBottom != aligned) {
        mBaselineAlignBottom = aligned;
        requestLayout();
    }
}
0 голосов
/ 24 июля 2014

Я использовал текстовое представление вместо изображения и использовал новое текстовое представление для рисования, чтобы установить изображение, и оно работало:

<TextView 
        android:id="@+id/month" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="feb"
        android:textSize="60px"
        android:typeface="serif"
        />
<TextView 
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:paddingLeft="15px"
        android:layout_toRightOf="@id/month"
        android:layout_alignBaseline="@id/month"
        android:drawableRight="@drawable/minicalimage" 
        android:id="@+id/calimage"
        />
0 голосов
/ 22 августа 2012

Я наткнулся на аналогичную проблему и решил ее, просто полностью исключив layout_alignBaseline, полагаясь на layout_alignBottom, который доступен начиная с API 1.

...