выравнивание макета: пейзаж против портрета

#android #android-layout

#Android #android-layout

Вопрос:

Может кто-нибудь сказать мне, почему текст в этом макете центрируется по горизонтали в альбомном режиме, но выравнивается по левому краю в портретном режиме?

РЕДАКТИРОВАТЬ: это так, потому что для ширины текста не указано ограничение в пикселях (т.Е. 500dip). Так что, если это wrap_content, android просто перемещает текст по всему доступному пространству. Я предполагаю, что это «правильное» поведение для текстового компонента, но совершенно нежелательное.

 <LinearLayout android:id="@ id/progressLayout2"
    android:layout_height="wrap_content" android:layout_width="wrap_content"
    android:layout_centerHorizontal="true" android:layout_centerVertical="true"
    android:orientation="vertical">

    <TextView android:layout_height="wrap_content"
        android:layout_width="wrap_content" android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" android:text="@string/splash_text"
        android:id="@ id/heading_splash_text" android:textSize="45dip"
        android:textColor="#A00000" android:layout_alignParentTop="true"
        android:layout_gravity="center" android:paddingBottom="70dip"
        android:paddingTop="50dip" android:typeface="normal" android:textStyle="bold"/>

</LinearLayout>
  

Ответ №1:

Я согласен с некоторыми изменениями из первого ответа, но я предполагаю, что, поскольку у вас есть ‘wrap_content’ в линейной компоновке, и у вас там нет пространства имен, этот макет находится внутри какого-то другого материала.

Во-первых, вам в значительной степени нужна ширина ‘fill_parent’, даже если вы не указываете высоту. То, где должна быть указана сила тяжести, обычно сбивает с толку, но работает следующее. Я добавил цвет фона к тексту, чтобы вы могли видеть, где он находится относительно всего остального.

При необходимости добавьте отступы.

 <LinearLayout
          android:layout_height="fill_parent"
          android:layout_width="wrap_content"
          android:orientation="vertical"
          android:layout_gravity="center"
    >

<TextView android:layout_height="wrap_content"
          android:layout_width="wrap_content"
          android:text="Some text"
          android:textSize="45dip"
          android:textColor="#A00000"
          android:typeface="normal"
          android:background="#444444"
          android:textStyle="bold"/>
  

Ответ №2:

Попробуйте это:

 <LinearLayout android:id="@ id/progressLayout2"  xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent" android:layout_width="fill_parent"
  android:orientation="vertical">

<TextView android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:text="test"
    android:id="@ id/heading_splash_text" android:textSize="45dip"
    android:textColor="#A00000" 
  android:gravity="center_vertical|center_horizontal"
    android:typeface="normal" android:textStyle="bold"/>
</LinearLayout>
  

Комментарии:

1. Я думаю, что причина, по которой ваш код выровнен по левому краю в портретном режиме, заключается в том, что linearlayout — это wrap_content, я думаю, что его родительский элемент управления помещает его на левую сторону в портретном режиме.