#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