Центрировать TextView, удерживая его справа от кнопки? - PullRequest
2 голосов
/ 07 декабря 2010

Я почти уверен, что делал это раньше, но я забыл, как.

Вот проблема: У меня есть кнопка и текстовое представление, и я хочу, чтобы текстовое изображение было центрировано, в то время как кнопка находится на левой стороне.

Нет проблем? Просто поместите их в относительное расположение, сделайте текстовое поле centerinparent и кнопкой alignparentleft.

Но теперь я собираюсь динамически изменить текст, чтобы он мог быть написан поверх кнопки! Я просто добавлю toRightOf = "@ id / button" в текстовое представление. Нет, теперь это больше не по центру.

Хотелось бы предоставить скриншот, но, похоже, у компьютера недостаточно памяти и он не может этого сделать.

Вот код: http://pastebin.com/3N70Vjre (Поскольку я не могу вставить XML ...?)

  <RelativeLayout
        android:id="@+id/header"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true">
        <Button
                android:id="@+id/leftbutton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:text="text!"
                />
        <TextView
                android:id="@+id/toptext"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@android:color/white"
                android:layout_toRightOf="@id/leftbutton"
                android:layout_centerInParent="true"
                android:textSize="16sp"
                android:textStyle="bold"
                android:text="Text!"
                android:singleLine="true"
                />
  </RelativeLayout>

Ответы [ 3 ]

3 голосов
/ 07 декабря 2010

Попробуйте (к сожалению, я на работе, поэтому не могу перейти в Eclipse, чтобы получить какой-то код) -

  • Измените layout_width TextView на fill_parent.
  • Установить гравитацию TextView по центру (чтобы текстовые центры внутри TextView)
  • Установите layout_weight для кнопки равным 1, а layout_weight для TextView равным 2. Обратите внимание, что вам, возможно, придется использовать эти цифры, чтобы получить нужный макет.

Это должно центрировать текст TextView после Button, хотя он не будет центрировать сам TextView. Это можно сделать, заменив TextView контейнером (Linear / Relative Layout) и выполнив тот же метод, что и выше, для Layout вместо TextView. Затем вы поместите ваш TextView внутри контейнера и установите гравитацию контейнера на «центр».

Надеюсь, это поможет вам в правильном направлении:)

0 голосов
/ 07 декабря 2010

Вы можете попробовать это (псевдокод):

<RelativeLayout>
  <Button>
  <LinearLayout toLeftOf="toptext" type="horizontal">
    <TextView gravity="center">
  </LinearLayout>
</RelativeLayout>

Возможно, вам понадобится LinearLayout width = "fill_parent". Не уверен, что это сработает или нет. Впоследствии вы можете попробовать некоторые из перечисленных здесь вещей: http://thinkandroid.wordpress.com/2010/01/14/how-to-position-views-properly-in-layouts/

0 голосов
/ 07 декабря 2010

Попробуйте сначала объявить TextView, а затем выровнять кнопку слева от текстового представления. Имейте в виду, что вы можете столкнуться с проблемами, если TextView станет слишком широким.

РЕДАКТИРОВАТЬ: я вижу, поэтому вы пытаетесь сделать что-то вроде заголовка iPhone с кнопками назад / вперед (в любом случае, похоже). Попробуйте эту модификацию. Я все еще верю, что вы столкнетесь с проблемами, если TextView станет достаточно большим, чтобы нажать кнопку.

  <RelativeLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/header"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_alignParentTop="true"
      >
      <TextView
          android:id="@+id/toptext"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:textColor="@android:color/white"
          android:layout_alignParentCenter="true"
          android:textSize="16sp"
          android:textStyle="bold"
          android:text="Text!"
          android:singleLine="true"
          />
      <Button
          android:id="@+id/leftbutton"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentLeft="true"
          android:text="text!"
          />        
  </RelativeLayout>

Попробуйте вместо этого использовать FrameLayout. Это может сделать больше, чем вы ожидаете:

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView
        android:id="@+id/toptext"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="@android:color/white"
        android:textSize="16sp"
        android:textStyle="bold"
        android:text="Text!"
        android:singleLine="true"
        />
    <Button
        android:id="@+id/leftbutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Text!"
        />
</FrameLayout>
...