2013-09-10 2 views
5

[Решено] Мне пришлось добавить android:fillViewport="true" в ScrollView, который исправил проблему с текстом, не центрирующим по вертикали.Неверный текст текста текста вертикально

Я знаю, что это ответили много раз раньше, но я до сих пор не могу центрировать текст в текстовом виде по вертикали.

<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/scrollView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <RelativeLayout 
     android:id="@+id/relativelayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <ImageView 
      android:id="@+id/icon" 
      android:layout_width="@dimen/icon_width" 
      android:layout_height="@dimen/icon_height" 
      android:src="@drawable/picture" /> 

     <TextView 
      android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_toRightOf="@+id/icon" 
      android:gravity="center_vertical" 
      android:layout_alignBottom="@+id/icon" 
      android:layout_alignTop="@+id/icon" 
      android:text="@string/title_text" 
      android:textSize="@dimen/textsize" 
      android:textStyle="bold" 
      android:textColor="@color/color" 
      android:shadowColor="@color/shadow" 
      android:shadowRadius="5"/> 

     </RelativeLayout> 
</ScrollView> 

Нормально это должно работать с

android:gravity="center_vertical" 

, но это не имеет никакого влияния на TextView ...

Weird дело, что у меня есть второе приложение с точно такой же код и он Там без проблем.

/редактировать

Чтобы прояснить мой вопрос: Это то, что я прямо сейчас:
http://i.imgur.com/WwHCegq.png

Это то, что я хочу:
http://i.imgur.com/9T8CyT6.png

+0

Поскольку вы У меня нет места на высоте, андроид: гравитация не имеет места, чтобы центрировать текст, изменить андроид: гравитация для андроида: layout_gravity –

+0

Почему у вас есть 'android: layout_alignBottom =" @ + id/icon "' 'android: layout_alignTop =" @ + id/icon "' как часть xml-файла? Если вы хотите, чтобы «TextView» выровнял центр, это должен быть единственный атрибут. – BC2

+0

Потому что я думал, что тогда я могу легко центрировать текст по вертикали в текстовом виде. – f4bzen

ответ

2

заменить TextView с этим код, и он будет работать нормально

 <TextView 
     android:id="@+id/title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/icon" 
     android:layout_alignParentTop="true" 
     android:layout_alignTop="@+id/icon" 
     android:layout_toRightOf="@+id/icon" 
     android:shadowColor="@color/shadow" 
     android:shadowRadius="5" 
     android:text="@string/title_text" 
     android:textColor="@color/color" 
     android:textSize="@dimen/textsize" 
     android:textStyle="bold" /> 
+0

Это только центр текста на экране для меня, и это не то, что я хочу сделать (пожалуйста, взгляните на 2 примера afte r/edit в исходном вопросе) – f4bzen

+0

Вам нужно уточнить свой вопрос, вы можете принять этот служебный документ. http://developer.android.com/guide/topics/ui/layout/relative.html – wSakly

+0

PLease посмотреть на мое редактирование в исходном вопросе: это то, что у меня есть прямо сейчас: http: //i.imgur. com/WwHCegq.png Это то, что я хочу: http://i.imgur.com/9T8CyT6.png – f4bzen

1

андроида: гравитация определяет, как родитель будет положение своих детей. В этом случае родителем является TextView, а дочерний элемент является фактическим текстом в этом представлении. Если TextView (родительский) не шире текста (ребенка), то гравитация не будет иметь никакого эффекта.

андроид: гравитация документы для справки:

Определяет способ выравнивания текста по x- отображения вида и/или оси у, когда текст меньше, чем вид.

Установите ширину вашего TextView так:

android:layout_width="match_parent" 

Это должно привести текст, чтобы по центру вертикально.

+0

Ну, но текст не должен быть таким высоким, как изображение, поскольку я использую 'android: layout_alignBottom =" @ + id/icon "' и 'android: layout_alignTop =" @ + id/icon "'? Кроме того, я хочу центрировать текст по вертикали, а не по горизонтали. – f4bzen

0

Я думаю, вы можете попробовать один из следующих способов:

  1. в TextView, установить андроид: layout_centerVertical = "истинный"

или

  1. как 1-го ответа, но Я думаю, что это должен быть андроид: layout_height = "match_parent"

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

+0

Изображения более чем в два раза больше в обоих приложениях, чем текст (вид), поэтому это не должно быть проблемой. Единственное отличие состоит в том, что первый был создан с помощью eclipse, второй - с Android-студией. И, как упоминалось в других ответах, 'android: layout_height =" match_parent "' также не работал. – f4bzen

+0

Извините, я прежде всего тщательно изучаю ваш код.Можете ли вы попытаться установить высоту TextView для android: layout_height = "0dp" вместо "wrap_content"? Я думаю, что конфликт height_content высотой конфликтует с alignTop и Bottom –

+0

Установка высоты до 0dp также не влияет, текст по-прежнему не поддерживается ... – f4bzen

1

Когда ваши используют Relative Layout, вы можете добавить в свой TextView:

`android:layout_centerVertical="true"` 
+0

Я уже пробовал это, но это, к сожалению, тоже не имеет никакого эффекта. – f4bzen

+1

но вы также должны устранить андроид: layout_alignBottom = «@ + идентификатор/значок» андроид: layout_alignTop = «@ + идентификатор/значок» перед добавлением: андроид: layout_centerVertical = «истинный» Я испытал это, и она работала для меня – Houssem

+0

Это только центр текста на экране для меня, и это не то, что я хочу сделать (посмотрите на 2 примера после/edit в исходном вопросе) – f4bzen

8

для достижения желаемого результата, то это будет достаточно, чтобы удалить

android:gravity="center_vertical" 
android:layout_alignBottom="@+id/icon" 
android:layout_alignTop="@+id/icon" 

и добавить

android:layout_centerVertical="true"

вместо этого.

+0

Это только центр текста на экране для меня, и это не то, что я хочу сделать (пожалуйста, взгляните на 2 примера после/edit в исходном вопросе) – f4bzen

+0

Нет, это центрирует TextView внутри вашего родственника макет, высота которого является 'wrap_content', поэтому он обертывает ваш ImageView и записывает' android: layout_centerVertical = "true" 'позиции TextView вертикально внутри этого контейнера, который вам нравится. – lomza

+0

Нет, это не то, что я хочу. Я не хочу центрировать текст в относительной компоновке. Это то, что я хочу: http://i.imgur.com/9T8CyT6.png И это то, что у меня есть прямо сейчас: http://i.imgur.com/WwHCegq.png – f4bzen

0

для других, у которых есть эта проблема существует ошибка в относительных макетах после апи 18 см https://code.google.com/p/android/issues/detail?id=59368

фикса, который работал для меня был заменить мою относительную раскладку с этим кодом (находится в ссылке выше)

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: это работало только в одной конкретной ситуации. В другом случае это было ужасно. Вы можете попробовать его, если вы хотите

public class FixRelativeLayoutBug extends RelativeLayout { 
    public FixRelativeLayoutBug(Context context) { 
     super(context); 
    } 

    public FixRelativeLayoutBug(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public FixRelativeLayoutBug(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    private static final int AT_MOST_UNSPECIFIED = MeasureSpec.makeMeasureSpec((1<<30)-1, MeasureSpec.AT_MOST); 

    @Override 
    protected void onMeasure(int widthSpec, int heightSpec) 
    { 
     // RelativeLayout has bugs when measured in UNSPECIFIED height mode that were supposedly fixed 
     // in API 18. However the 'fix' does not work with breaks gravity == center_vertical in TextView. 
     // https://code.google.com/p/android/issues/detail?id=63673 
     if (MeasureSpec.getMode(heightSpec) == MeasureSpec.UNSPECIFIED) heightSpec = AT_MOST_UNSPECIFIED; 
     super.onMeasure(widthSpec, heightSpec); 
    } 
} 
1

Одно решение, которое делает работу (все выше нет), если вы беспокоитесь только о самом тексте, чтобы сделать TextView столь же высоко, как ImageView (выровняв его сверху без поля и снизу до идентификатора «другие виды»), а затем используйте андроид: gravity = «center» в этом текстовом поле (убедитесь, что никакие другие выравнивания не влияют на это значение)

Смежные вопросы