Выравнивание текстовых представлений

#android #layout

#Android #макет

Вопрос:

Я разрабатываю приложение для Android, относительный макет которого приведен ниже.

Вот ссылка imgur на то, как приложение отображается на экране:http://imgur.com/c4rNJ . Я бы хотел, чтобы «Текст 1» отображался прямо над «ленивой лисой …». Надеюсь, это поможет прояснить, чего я хочу достичь.

     <?xml version="1.0" encoding="utf-8"?>

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content" android:layout_width="fill_parent"
    android:background="@color/white">

    <TextView android:id="@ id/text1" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:layout_marginLeft="0dip"


        android:textColor="@color/black" android:text="Text 1" android:lines="1"
        android:scrollHorizontally="true" android:ellipsize="end" />

    <Button android:id="@ id/checkBox" android:layout_height="wrap_content"
        android:layout_width="wrap_content" android:drawableRight="@drawable/checkbox_unchecked_30"
        android:layout_below="@ id/text1" android:background="@color/white" />

    <TextView android:id="@ id/text2" android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:layout_toRightOf="@ id/checkBox"
        android:layout_alignTop="@ id/checkBox" android:layout_below="@ id/text1"


        android:textColor="@color/black" android:text="a lazy fox jumped over the dam and said help"

        android:lines="1" android:scrollHorizontally="true" android:ellipsize="end" />

    <TextView android:id="@ id/text3" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:layout_toRightOf="@ id/checkBox"
        android:layout_below="@ id/text2" android:textColor="@color/black"
        android:text="Text 3" />

    <TextView android:id="@ id/text4" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:layout_below="@ id/text2"
        android:layout_toRightOf="@ id/text3" android:textColor="@color/black"
        android:text="Text 4" />

    <TextView android:id="@ id/text5" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:layout_below="@ id/text2"
        android:layout_toRightOf="@ id/text4" android:textColor="@color/black"
        android:text="Text 5" />

</RelativeLayout>
  

Я хочу, чтобы «Текст 1» отображался прямо над текстом, который начинается с «ленивый лис …». Прямо сейчас «Текст 1» отображается над флажком. Я не уверен, как достичь вышеуказанного. Я пробовал разные вещи, но, похоже, ничего не работает. Что я должен делать для достижения желаемого макета?

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

1. Пожалуйста, предоставьте изображение того, чего вы пытаетесь достичь.

2. @Macarse Я не могу, так как репутация слишком низкая.

3. Публикация находится где-то в другом месте и предоставьте нам ссылку

Ответ №1:

Вам нужно добавить layout_alightLeft атрибут в свой text1 :

 <TextView android:id="@ id/text1" 
    android:layout_alignLeft="@ id/text2"
    ...
/>
  

введите описание изображения здесь


Полный файл макета:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent">

    <TextView android:id="@ id/text1" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_marginLeft="0dip"
        android:layout_alignLeft="@ id/text2"
        android:text="Text 1"
        android:lines="1"
        android:scrollHorizontally="true" 
        android:ellipsize="end" />

    <Button
        android:id="@ id/checkBox" 
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"        
        android:layout_below="@ id/text1"
        android:text="button"  />

    <TextView 
        android:id="@ id/text2" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:layout_toRightOf="@ id/checkBox"
        android:layout_alignTop="@ id/checkBox" 
        android:layout_below="@ id/text1"         
        android:text="a lazy fox jumped over the dam and said help"
        android:lines="1" 
        android:scrollHorizontally="true"
         android:ellipsize="end" />

    <TextView 
        android:id="@ id/text3" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_toRightOf="@ id/checkBox"
        android:layout_below="@ id/text2"        
        android:text="Text 3" />

    <TextView 
        android:id="@ id/text4" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_below="@ id/text2"
        android:layout_toRightOf="@ id/text3"        
        android:text="Text 4" />

    <TextView
        android:id="@ id/text5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@ id/text2"
        android:layout_toRightOf="@ id/text4"        
        android:text="Text 5" />

</RelativeLayout>
  

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

1. Я обновил ответ полной копией моего файла макета. Попробуйте.

2. это интересно. это не работает. Это случайно не специфично для api? Я ориентируюсь на sdk версии 3 (Android 1.5).

3. Я только что попробовал это с целевым SDK, установленным на 3, и это также работает.

4. хорошо, тогда проблема заключается в другом, потому что я вообще не менял ваш файл макета перед его запуском. Спасибо за вашу помощь.

5. Вы можете сделать следующее: создать новый проект, вставить этот макет, запустить и протестировать его на эмуляторе. Посмотрим, сможете ли вы воспроизвести это.

Ответ №2:

Я ориентировался на Android 1.5, в котором прямые ссылки не работают в RelativeLayout. Прямые ссылки были впервые реализованы в Android 1.6 (См.:http://developer.android.com/resources/articles/ui-1.6.html ) и, следовательно, ни одно из предложенных другими решений не работало.

Ответ №3:

Если я правильно понимаю ваше требование, вы хотите, чтобы «Text1» отображался прямо над / выровнен с «ленивой лисой …».

Попробуйте изменить определение первого TextView на это (обратите внимание на последний атрибут):

     <TextView
    android:id="@ id/text1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="0dip"
    android:textColor="@color/black"
    android:text="Text 1"
    android:lines="1"
    android:scrollHorizontally="true"
    android:ellipsize="end"
    android:layout_alignLeft="@ id/text2" />
  

Редактировать:
Вот полный файл макета:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:background="@android:color/white">

<TextView
    android:id="@ id/text1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="0dip"
    android:textColor="@android:color/black"
    android:text="Text 1"
    android:lines="1"
    android:scrollHorizontally="true"
    android:ellipsize="end"
    android:layout_alignLeft="@ id/text2" />

<Button
    android:id="@ id/checkBox"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_below="@ id/text1"
    android:drawableRight="@drawable/checkbox_unchecked_30"
    android:background="@android:color/white" />

<TextView
    android:id="@ id/text2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@ id/checkBox"
    android:layout_alignTop="@ id/checkBox"
    android:layout_below="@ id/text1"


    android:textColor="@android:color/black"
    android:text="a lazy fox jumped over the dam and said help"

    android:lines="1"
    android:scrollHorizontally="true"
    android:ellipsize="end" />

<TextView
    android:id="@ id/text3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@ id/checkBox"
    android:layout_below="@ id/text2"
    android:textColor="@android:color/black"
    android:text="Text 3" />

<TextView
    android:id="@ id/text4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@ id/text2"
    android:layout_toRightOf="@ id/text3"
    android:textColor="@android:color/black"
    android:text="Text 4" />

<TextView
    android:id="@ id/text5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@ id/text2"
    android:layout_toRightOf="@ id/text4"
    android:textColor="@android:color/black"
    android:text="Text 5" />
</RelativeLayout>
  

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

1. Можете ли вы опубликовать полный макет, чтобы я мог запустить с моей стороны и сравнить с тем, что у меня есть?

2. Проверьте правку. Теперь мне действительно любопытно, почему у вас это не работает. В вашем коде вы получаете доступ к виджетам и делаете что-нибудь с ними? Или вы просто загружаете этот файл?

3. Код просто загружает XML-файл. Никакой другой обработки не выполняется. Ваш макет не работает. Я понятия не имею, почему!

4. хорошо, я понял это. Android 1.5 не может обрабатывать прямые ссылки, в то время как Android 1.6 это делает. Смотрите: developer.android.com/resources/articles/ui-1.6.html

Ответ №4:

Я думаю, вам следует добавить android: layout_below="@id/editText2" к text1