Android: использование alignBaseline для изображения, следующего за текстом
Ниже представлен 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"
/>
Ответы
Ответ 1
Я смог выполнить то, что хотел. Я не использовал 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]()
Ответ 2
Так как API11 вы можете просто использовать
android:baselineAlignBottom="true"
До API11 вы можете перезаписать getBaseLine()
и вернуть высоту изображения.
Ответ 3
Вы должны использовать обе следующие строки в ImageView для выравнивания нижней части изображения в нижней части ближайшего 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>
Ответ 4
Я наткнулся на подобную проблему и решил ее просто, избегая layout_alignBaseline
вообще, полагаясь на layout_alignBottom
вместо этого, который доступен с API 1.
Ответ 5
я использовал текстовое представление вместо представления изображения и использовал новый текстовый вид, который можно было отобразить для установки изображения, и он работал:
<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"
/>
Ответ 6
/**
* 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();
}
}
Ответ 7
Вы хотите использовать атрибут android: layout_alignBottom, чтобы выровнять ImageView с базовым уровнем другого представления.
В приведенном ниже примере я выровнял ImageView к другому TextView. Я включил код для ImageView, а не TextView. Чтобы выровнять с TextView, вам просто нужно включить идентификатор TextView.
Корректировка поля или отступов приведет к смещению представлений, если пользователь изменит размер текста на своем устройстве.
![введите описание изображения здесь]()
<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>