- RelativeLayout
- Программное создание относительной разметки
- Создаём неподвижную полоску
- Создание прокрутки TextView на Android
- 24 ответов
- бонус:
- Relative Layout — особенности макетов экранов android приложений
- Расположение View
- Пример
- Android Layouts: обзор RelativeLayout и LinearLayout
- Обзор XML макетов (Android Layouts)
- Основные макеты в Android:
- Android Layouts: атрибуты XML макета/компоновки
- Макет LinearLayout в Android
- Макет RelativeLayout в Android
- По отношению к родительскому элементу
- По отношению к соседним элементам
RelativeLayout
ReiativeLayout (относительная разметка) находится в разделе Layouts и позволяет дочерним компонентам определять свою позицию относительно родительского компонента или относительно соседних дочерних элементов (по идентификатору элемента). В RelativeLayout дочерние элементы расположены так, что если первый элемент расположен по центру экрана, другие элементы, выровненные относительно первого элемента, будут выровнены относительно центра экрана. При таком расположении, при объявлении разметки в XML-файле, элемент, на который будут ссылаться для позиционирования другие объекты представления, должен быть объявлен раньше, чем другие элементы, которые обращаются к нему по его идентификатору.
Важные атрибуты, которые связаны с родителем.
- android:layout_alignParentBottom — выравнивание относительно нижнего края родителя
- android:layout_alignParentLeft — выравнивание относительно левого края родителя
- android:layout_alignParentRight — выравнивание относительно правого края родителя
- android:layout_alignParentTop — выравнивание относительно верхнего края родителя
- android:layout_centerInParent — выравнивание по центру родителя по вертикали и горизонтали
- android:layout_centerHorizontal — выравнивание по центру родителя по горизонтали
- android:layout_centerVertical — выравнивание по центру родителя по вертикали
Некоторые атрибуты можно использовать вместе, чтобы добиться нужного эффекта, например, разместить компонент в верхнем правом углу.
Компонент можно размещать не только относительно родителя, но и относительно других компонентов. Для этого все компоненты должны иметь свой идентификатор, по которому их можно будет отличать друг от друга. В этом случае вы можете задействовать другие атрибуты.
- android:layout_above — размещается над указанным компонентом
- android:layout_below — размещается под указанным компонентом
- android:layout_alignLeft — выравнивается по левому краю указанного компонента
- android:layout_alignRight — выравнивается по правому краю указанного компонента
- android:layout_alignTop — выравнивается по верхнему краю указанного компонента
- android:layout_alignBottom — выравнивается по нижнему краю указанного компонента
- android:layout_toLeftOf — правый край компонента размещается слева от указанного компонента
- android:layout_toRightOf — левый край компонент размещается справа от указанного компонента
Чтобы компоненты «не прилипали» друг к другу, используются атрибуты, добавляющие пространство между ними.
- android:layout_marginTop
- android:layout_marginBottom
- android:layout_marginLeft
- android:layout_marginRight
Рассмотрим простой пример. Допустим, мы хотим поместить на экран элементы EditText и Button. Кнопка должна находиться справа от текстового поля. Текстовое поле при этом должно быть выравнено слева относительно родительского элемента (компоновки) и слева относительно кнопки. В свою очередь кнопка должна быть выравнена справа относительно шаблона компоновки.
Во многих случаях грамотная относительная компоновка хорошо смотрится в альбомной и портретной ориентации.
Программное создание относительной разметки
Если вам понадобится динамически создавать относительную разметку в коде, то делается это следующим образом:
Создавать компоновку для относительной разметки чуть сложнее, чем для линейной компоновки. Рассмотрим ещё один пример. Предположим, нам нужен такой экран
Шаг 1: В XML-файле задаем относительную компоновку.
Шаг 2: Определяем дочерние элементы. В нашем случае мы имеем семь текстовых меток разного цвета. Каждому элементу присваиваем необходимые свойства: текст, цвет, размер символов и так далее.
Шаг 3: Определяем правила относительной разметки.
Красная метка должна находиться в правом верхнем углу родительского элемента.
Оранжевая метка должна располагаться по центру по горизонтали относительно родительского элемент.
Желтая метка выравнивается по правой части родительского элемента.
Зелёная метка выравнивается по центру (по вертикали) и выводится слева от синей метки.
Синяя метка выравнивается по центру (по вертикали и горизонтали) относительно родительского элемента, т.е. точно по центру.
Метка цвета индиго выравнивается по центру (по вертикали) и выводится справа от синей метки.
Фиолетовая метка выводится в нижней части родительского элемента и занимает всю её ширину.
При разработке макета с относительной разметкой следите, чтобы элементы не налезали друг на друга (можете получить сообщение об ошибке). Старайтесь не усложнять макет и не забывайте присваивать уникальный идентификатор каждому элементу. Проверяйте макет в разных режимах ориентации.
Создаём неподвижную полоску
С помощью RelativeLayout можно создать неподвижную полоску внизу экрана, которая не будет прокручиваться вместе со списком. Для этого используется атрибут android:layout_alignParentBottom и родственные ему атрибуты для верхней части. Вот простой пример со списком.
И простой код для создания прокручиваемого списка, чтобы увидеть эффект неподвижной полоски с кнопкой.
Источник
Создание прокрутки TextView на Android
я отображаю текст в textview, который кажется слишком длинным, чтобы соответствовать на один экран. Мне нужно сделать мой виджет TextView с прокруткой. Как мне это сделать? это?
24 ответов
вам не нужно использовать ScrollView на самом деле.
свойства TextView в xml-файле вашего макета.
Бинго, она прокручивается!
вот как я это сделал чисто в XML:
Примечания:
android:fillViewport=»true» в сочетании с android:layout_weight=»1.0″ заставит textview занять все доступное пространство.
при определении Scrollview не указывайте android:layout_height=»fill_parent» в противном случае scrollview не работает! (из-за этого я только что потерял целый час! ФФС.)
PRO СОВЕТ:
программно прокрутите вниз после добавления текста, используйте это:
все, что действительно необходимо, это setMovementMethod (). Вот пример использования LinearLayout.
main.в XML WordExtractTest.java
сделайте свой textview просто добавив Это
не надо ставить в
вы можете сделать свою работу, просто добавив:
и поместите этот код в свой класс Java:
- вокруг TextView на ScrollView ; или
- установите метод перемещения в ScrollingMovementMethod.getInstance(); .
лучший способ, который я нашел:
замените TextView на EditText следующими дополнительными атрибутами:
нет необходимости в обертывании в ScrollView.
Это «как применить полосу прокрутки к вашему TextView», используя только XML.
во-первых, вам нужно взять элемент управления Textview в main.в XML файл и записать в него текст . вот так:
затем поместите элемент управления text view между scrollview для отображения полосы прокрутки для этого текста:
простой. Вот как я это сделал:—5—>
бонус:
чтобы текстовый вид прокручивался вниз по мере его заполнения, вы должны добавить:
в xml-файл TextView. Он будет прокручиваться вниз автоматически, как больше текста приходит.
конечно, вам нужно добавить текст с помощью функции append вместо set текст:
я использовал его для журнала.
надеюсь, это поможет;)
«pro tip» выше от кого-то где-то (создание прокрутки TextView на Android) отлично работает, однако, что делать, если вы динамически добавляете текст в ScrollView и хотели бы автоматически прокручивать вниз после добавления только когда пользователь находится в нижней части ScrollView? (Возможно, потому, что если пользователь прокрутил вверх, чтобы прочитать что-то, что вы не хотите автоматически сбрасывать вниз во время добавления, которое будет раздражающий.)
в любом случае, вот это:
в mTextStatus.getLineHeight() сделает это так, что вы не scrollToBottom (), если пользователь находится в пределах одной строки от конца ScrollView.
Это обеспечит плавную прокрутку текста с полосой прокрутки.
Если вы хотите, чтобы текст прокручивался в textview, вы можете выполнить следующее:
сначала вам нужно подкласс textview.
и затем использовать это.
Ниже приведен пример подкласса textview.
теперь, вы должны использовать это в XML следующим образом:
Я не нашел прокрутки TextView для поддержки жеста «бросок», где он продолжает прокрутку после щелчка вверх или вниз. Я закончил тем, что реализовал это сам, потому что я не хотел использовать ScrollView по разным причинам, и, похоже, не было MovementMethod, который позволял мне выбирать текст и нажимать на ссылки.
добавьте следующее в textview в XML.
и, наконец, добавить
когда вы закончите с прокруткой, добавьте эту строку в последнюю строку представления при вводе чего-либо в представлении:
добавьте это в свой XML-макет:
и в коде вы должны написать следующие строки:
Если вы не хотите использовать решение EditText, вам может повезти с:
код ниже создает автоматическую горизонтальную прокрутку textview:
при добавлении TextView в xml используйте
задайте следующие свойства TextView в onCreate ()
используйте его так
в моем случае.Макет Ограничения.В качестве 2.3.
я боролся с этим больше недели и, наконец, понял, как это сделать!
моя проблема заключалась в том, что все будет прокручиваться как «блок». Сам текст прокручивался, но как кусок, а не строка за строкой. Это, очевидно, не сработало для меня, потому что это отрезало бы линии внизу. Все предыдущие решения не работали для меня, поэтому я создал свой собственный.
вот самое простое решение на сегодняшний день:
создайте файл класса: ‘PerfectScrollableTextView’ внутри пакета, затем скопируйте и вставьте этот код в:
наконец, измените свой «TextView» в XML:
поставить maxLines и scrollbars внутри TextView в xml.
затем в коде java.
у меня была эта проблема, когда я использовал TextView внутри ScrollView . Это решение сработало для меня.
всякий раз, когда вам нужно используйте ScrollView в качестве родителя, и вы также используете метод перемещения прокрутки с TextView.
и портрет для ландшафтного устройства, что время происходят некоторые проблемы. (например) вся страница прокручивается, но метод перемещения прокрутки не может работать.
Если вам все еще нужно использовать ScrollView в качестве родительского или метода перемещения прокрутки, вы также используете ниже desc.
Если у вас нет никаких проблем затем вы используете EditText вместо TextView
здесь EditText ведет себя как TextView
Источник
Relative Layout — особенности макетов экранов android приложений
Перевод документации официального сайта developer.android.com
RelativeLayout — это view group, которая располагает на экране дочерние view определенным образом относительно других элементов. Позиция каждого view может быть определена как относительно других view (например, слева, справа, сверху или снизу) так и относительно родительской области RelativeLayout (например, выравнивание по верхней, нижней, левой, правой сторонам или по центру).
RelativeLayout — очень мощная утилита для разработки пользовательского интерфейса, поскольку она позволяет сократить количество вложенных view group, тем самым повышая производительность. Если вы используете несколько вложенных групп LinearLayout, вы можете заменить их одним RelativeLayout.
Расположение View
RelativeLayout позволяет дочерним view определять свою позицию относительно родительского view или относительно друг друга (с помощью ID). Таким образом вы можете выровнять два элемента относительно правой границы, или сделать один ниже другого, центрировать, и т. д. По умолчанию все дочерние view устанавливаются в правом верхнем углу layout, так что вы должны указать позицию каждого view используя различные свойства, доступные в RelativeLayout.LayoutParams (смотрите таблицу в конце этой статьи).
Некоторые из свойств макета, доступные view в RelativeLayout:
android:layout_alignParentTop
Делает верхний край этого view совпадающим с верхним краем родителя.
android:layout_centerVertical
Центрирует этот дочерний элемент по вертикали в его родителе.
android:layout_below
Располагает верхний край этого view ниже view, определенного с помощью ID.
android:layout_toRightOf
Располагает левый край этого view правее view, определенного с помощью ID.
Это всего лишь несколько примеров. Все атрибуты макета задокументированы в RelativeLayout.LayoutParams (смотрите таблицу в конце этой статьи).
Значение для каждого свойства макета либо логическое, что позволяет установить позицию макета относительно родительского RelativeLayout, либо ID, который ссылается на другой view в макете, по отношению к которому view должен быть расположен.
В вашем XML layout, зависимости по отношению к другим view в макете могут быть объявлены в любом порядке. Например, вы можете указать, что «view1» будет расположен ниже «view2«, даже если «view2» — последний элемент, объявленный в иерархии. Пример ниже демонстрирует такой сценарий.
Пример
Каждый из атрибутов, которые контролируют относительное положение view, выделен.
Источник
Android Layouts: обзор RelativeLayout и LinearLayout
В этой статье мы ударимся в теорию и рассмотрим основные блоки для построения пользовательского интерфейса: рассмотрим различные XML макеты (компоновки) в Android, основательно разберемся с RelativeLayout и LinearLayout .
Эта статья является хорошей шпаргалкой по работе с Android Layouts, а именно с компоновкой RelativeLayout и LinearLayout .
Обзор XML макетов (Android Layouts)
В Android основным строительным блоком пользовательского интерфейса является объект View , который по умолчанию он занимает прямоугольную область на экране. Этот объект является экземпляром одноименного класса View и базовым классом для всех компонентов пользовательского интерфейса, например: TextView, Button, EditText и другие.
Также есть класс ViewGroup , который является подклассом View . Один или несколько View могут быть сгруппированы в ViewGroup . Этот класс обеспечивает компоновку, вид и последовательность View . Примерами ViewGroup являются LinearLayout , RelativeLayout , о которых мы сегодня и поговорим.
Основные макеты в Android:
- RelativeLayout — это ViewGroup , который определяет положение дочерних View относительно друг друга.
- LinearLayout — это ViewGroup , который определяет расположение всех дочерних элементов: по вертикали или по горизонтали.
- AbsoluteLayout позволяет указать точное положение дочерних View .
- TableLayout рассматривает дочерние элементы в виде строк и столбцов.
- GridView — разновидность ViewGroup , в котором элементы представлены в двумерной сетке с прокруткой. Элементы в GridView попадают из назначенного экземпляра ListAdapter .
- FrameLayout заполняет собой экран для отображения единственного View .
- ListView — набор View , который можно скроллить (прокручивать).
- Scrollview — разновидность FrameLayout , позволяющая просматривать элементы пользовательского интерфейса даже если они не видны на первом экране. Это происходит с помощью скроллинга (пользователь прокручивает экран для полной видимости содержимого). Scrollview может содержать только один вид дочерний View и же макет ViewGroup .
Android Layouts: атрибуты XML макета/компоновки
- android:id — это идентификатор, который однозначно идентифицирует элемент View
- android:layout_width — ширина макета
- android:layout_height — высота макета
- android:layout_margin — дополнительное пространство за пределами элемента View .
- android:layout_padding определяет дополнительное пространство внутри элемента View .
- android:layout_gravity определяет расположение дочернего View .
- android:layout_weight определяет дополнительного пространства для View .
- android:layout_x определяет координаты макета по оси Ox
- android:layout_y определяет координаты макета по оси Oy
Атрибут android:layout_width=»wrap_content» указывает, что View должно занять ровно столько места по ширине, сколько занимает его содержимое.
Атрибут android:layout_width=» match_parent» указывает, что View должно занять ровно столько места по ширине, сколько занимает его родительский элемент.
В этом уроке мы рассмотрим два наиболее популярных в разработке под Android макета:
Макет LinearLayout в Android
- Макет LinearLayout в Android группирует элементы в одну линию. В разметке макета указываем атрибут android:orientation , который определяет тип размещения: по вертикали или по горизонтали. По умолчанию стоит значение по горизонтали.
- Значение «по вертикали» в LinearLayout означает только один дочерний элемент в строке, а «по горизонтали» означает одну сплошную строку элементов на экране.
- Атрибут android:layout_weight указывает важность элемента. Элемент с большим весом занимает больше места на экране.
Макет RelativeLayout в Android
Макет RelativeLayout определяет положение дочерних View относительно друг друга. Дочерние элементы в RelativeLayout определяют свое положение с помощью специальных атрибутов: toLeftOf , toRightOf , below , above . Например, мы явно указываем, что один элемент View должен быть toLeftOf (слева от) другого элемента View .
Мы также можем позиционировать View по отношению к своему родительскому элементу RelativeLayout , например, layout_centerHorizontal — элемент должен быть выравнен по горизонтали и быть по центру. Если ни один из атрибутов для позиционирования не указан, то View будет определен по умолчанию — в левом верхнем углу родительского элемента.
Ниже перечислены основные атрибуты макета RelativeLayout по трех различных категориях позиционирования:
По отношению к родительскому элементу
- android:layout_alignParentBottom — в нижней части родительского элемента (родителя/родительского контейнера)
- android:layout_alignParentLeft устанавливает элемент в левой части родительского элемента
- android:layout_alignParentRight устанавливает элемент в правой части родительского элемента
- android:layout_alignParentTop устанавливает элемент в верхней части родителя
- android:layout_centerHorizontal центрирует элемент по горизонтали внутри родительского контейнера
- android:layout_centerInParent центрирует элемент по горизонтали и по вертикали внутри родительского контейнера (по центре экрана)
- android:layout_centerVertical центрирует элемент по вертикали в пределах родительского контейнера
По отношению к соседним элементам
- Атрибут android:layout_above устанавливает элемент выше указанного элемента
- Атрибут android:layout_below устанавливает элемент ниже указанного элемента
- Атрибут android:layout_toLeftOf устанавливает элемент слева от указанного элемента
- Атрибут android:layout_toRightOf устанавливает элемент справа от указанного элемента
Следует отметить, что элемент устанавливается относительно другого элемента по его id. Это делается с помощью конструкции « @id/уникальныйИдентификаторЭлемента «, например:
Источник