Android — Android. Интерфейс. ScrollView


Android Scrollview интерфейс

Я использую WebView в андроиде для показа статей также экран имеет следующие предыдущие кнопки для навигации статей. Когда содержание меньше вперёд назад кнопки должны отображаться в нижней части экрана, и когда содержание огромно эти кнопки должны отображаться в конце содержания

Как я могу осуществить это? В настоящее время я делаю что-то вроде следующего:

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

Вы можете использовать ниже структуры для реализации вида:

Надеюсь, что это поможет вам . )

расширить Scrollview к деятельности, и сделать кнопку видимой, когда дифф == 00 установите butoon invible виден только при Schroll полной страницы. надеюсь, что это поможет.

ScrollView в Andro >22.06.2014, 18:54. Просмотров 1390. Ответов 8

имею HorizontalScrollView а в нем ScrollView, при прокрутки вниз если уклонится чуток вправо влево перестает скрол по вертикале (вроде тока 4.0.х так) в 4.1.х вроде норм.. если начал скролить вниз то влево-вправо уже не пойдет

как это можно решить ?

Добавлено через 9 часов 4 минуты
не кто не сталкивался ?

вот я нашел след. код (но это не совсем то что мне нужно ?)

Добавлено через 20 часов 17 минут
Актуально!

Ребята не каких соображений нету что ли? куда копать то?

22.06.2014, 18:54

ScrollView
Добрый день! Работаю с обычным ScrollView. Получаю что-то типа: Подскажите пожалуйста, можно ли.

ScrollView
Привет) Работаю со ScrollView у меня есть например 5 изображений, грубо говоря каждое отвечает за.

Промотать ScrollView
Экран содержит ScrolView, на нем находятся элементы (например кнопки). Можно ли сразу показать не.

Listview and scrollview
Здравствуйте у меня такая проблема. есть LinearLayout в котором чередуется textview и.

Наложение на ScrollView
Добрый день. Вот такая проблема, у меня сверху ScrollView лежит еще один блок LinearLayout. .

Элементы Andro >

Материал из AOW

Содержание

ViewGroup

Класс Layout является базовым при создании интерфейсов для андроид и управляет принципом расстановки своего содержимого. Вы можете выбирать из расстановки в виде линейного списка(LinearLayout), таблицы (TableLayout), последовательного расположения(RelativeLayout) и т.д.

В этой серии статей мы исследуем каждый из видов подробно.

Содержимым Layout могут быть любые управляющие элементы или что-либо, что является View (или наследует View). Все layout`ы наследуют ViewGroup (который наследует View), таким образом, вы можете вложить layout`ы друг в друга!

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


Стандартные виды layout:

FrameLayout

FrameLayout предназначен, чтобы зафиксировать на экране отображение единственного элемента. Как правило, FrameLayout должен быть использован для закрепления единственного элемента интерфейса, так как обычно трудно обеспечить это при масштабирование под разный размер экрана без перекрытия элементами друг друга. Однако вы можете, добавить несколько элементов в FrameLayout и контролировать их положение в FrameLayout путем назначения привязки к каждому элементу, используя android:layout_gravity атрибут.

Последние добавленные View-элементы отображаются поверх остальных. Размер FrameLayout определяется размером самого крупнного view-элемента (плюс отступы), видимого либо скрытого (если родитель FrameLayout это позволяет). View-элементы которые скрыты (GONE) используются для определения размера, только если setConsiderGoneChildrenWhenMeasuring() установлен в true.

ScrollView

При большом количестве информации, которую нужно поместить на экране приходится использовать полосы прокрутки. В Android существуют специальные виджеты ScrollView и HorizontalScrollView, которые являются контейнерными элементами и наследуются от ViewGroup. Обратите внимание, что класс TextView использует свою собственную прокрутку и не нуждается в добавлении отдельных полос прокрутки. Но использование отдельных полос даже с TextView может улучшить вид вашего приложения и повышает удобство работы для пользователя.

В контейнеры ScrollView и HorizontalScrollView можно размещать только один дочерний элемент (обычно LinearLayout), который в свою очередь может быть контейнером для других элементов. Виджет ScrollView, несмотря на свое название, поддерживает только вертикальную прокрутку, поэтому для создания вертикальной и горизонтальной прокрутки необходимо использовать ScrollView в сочетании с HorizontalScrollView. Обычно ScrollView используют в качестве корневого элемента, а HorizontalScrollView — дочернего.

Если полосы прокрутки вас раздражают, то используйте атрибут andro , который скроет их.

В в теле метода onCreate() создайте ссылку на элемент TextView, объявленный в XML-разметке, и запишите в него через метод setText() какой-нибуль длинный текст, который не поместится в видимые размеры экрана устройства:

TextView text (TextView)findViewById(R.id.textview); // загружаем текст text.setText(«здесь должен быть длинный текст»);

LinearLayout

Макет разметка LinearLayout выравнивает все дочерние объекты в одном направлении — вертикально или горизонтально. Направление задается при помощи атрибута ориентации android:orientation.

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

Ниже приведен код разметки с основным макетом LinearLayout и двумя вложенными дочерними макетами, один из которых имеет горизонтальную ориентацию другой вертикальную.

TableLayout

Разметка макет TableLayout (Табличная разметка) — позиционирует свои дочерние элементы в строки и столбцы, как это привыкли делать веб-мастера в теге

. TableLayout не отображает линии обрамления для их строк, столбцов или ячеек. TableLayout может иметь строки с разным количеством ячеек. При формировании разметки таблицы некоторые ячейки при необходимости можно оставлять пустыми. При создании разметки для строк используются объекты TableRow, которые являются дочерними классами TableLayout (каждый TableRow определяет единственную строку в таблице). Строка может не иметь ячеек или иметь одну и более ячеек, которые являются контейнерами для других объектов. В ячейку допускается вкладывать другой TableLayout или LinearLayout.
XML

RelativeLayout

RelativeLayout — является ViewGroup, который отображает дочерние View-элементы с относительным позиционированием. Положение View может быть задано как относительно соседних элементов (например, выравнен по левой или нижней стороне элемента), либо позиционированно относительно области макета RelativeLayout (например, привязано к низу, левой стороне или к центру макета).

RelativeLayout предоставляет очень полезную возможность проектирования пользовательского интерфейса, без необходимости использовать вложенные ViewGroup-элементы. Если вы используете несколько вложенных LinearLayout, вы можете заменить их одним RelativeLayout.

Обратите внимание, на каждый из android:layout_ * атрибутов, такие как layout_below, layout_alignParentRight и layout_toLeftOf. При использовании RelativeLayout, вы можете использовать эти атрибуты, для описания положение каждого View. Каждый из этих атрибутов определяет различные варианты относительного позиционирования. Некоторые атрибуты используют идентификатор соседнего View-элемента чтобы определить своё положение. Например, для последней кнопки определено положение слева и выравнивание по верху относительно View-элемента имеющего ID ok.

TextView

Виджет TextView предназначен для отображения текста без возможности редактирования его пользователем, что видно из его названия (Text — текст, view — просмотр).

Иерархия классов текстовых полей

TextView один из самых используемых виджетов. С его помощью пользователю удобнее ориентироваться в программе. По сути, это как таблички: Руками не трогать, По газону не ходить, Вход с собаками воспрещен, Часы работы с 9.00 до 18.00. и т.д., и служит для представления пользователю описательного текста.

Для отображения текста в Textview в файле разметки используется атрибут android:text, например:

Такой подход является нежелательным. Рекомендуется всегда использовать текстовые ресурсы. В будущем эта привычка позволит вам обеспечить многоязыковую поддержку:

Программно текст можно задать методом setText():

  • Загружаем виджет из ресурсов


  • Задаем текст
  • Задаем текст с использованием текстовых ресурсов
  • Размер текста. При установке размера текста используются несколько единиц измерения: px (пиксели), dp, sp, in (дюймы), pt, mm. Для текстов рекомендуется использовать sp: andro
  • Цвет текста. Используются четыре формата в шестнадцатеричной кодировке: #RGB; #ARGB; #RRGGBB; #AARRGGBB, где R, G, B — соответствующий цвет, А — прозрачность (alpha-channel). Значение А, установленное в 0, означает прозрачность 100%.

Для всех вышеперечисленных атрибутов в классе Textview есть соответствующие методы для чтения или задания соответствующих свойств.

  • Если вы хотите создать многострочный текст в TextView, то используйте символы \n для переноса строк.

EditText

Виджет EditText — это текстовое поле для пользовательского ввода, которое используется, если необходимо редактирование текста. Следует заметить, что EditText является наследником TextView.

Веб-мастера знают о таком атрибуте HTML5 как placeholder, когда в текстовом поле выводится строчка-подсказка приглушенным (обычно серым цветом). Живой пример приведен ниже.

Подсказка видна, если текстовый элемент не содержит пользовательского текста. Как только пользователь начинает вводить текст, то подсказка исчезает. Соответственно, если удалить пользовательский текст, то подсказка появляется снова. Это очень удобное решение во многих случаях, когда на экране мало места для элементов.

В Android у многих элементов есть свойство Hint (атрибут hint), который работает аналогичным образом. Установите у данного свойства нужный текст и у вас появится текстовое поле с подсказкой.

  • Вызов нужной клавиатуры

Не во всех случаях нужна стандартная клавиатура с буковками и цифрами. Если вы пишете калькулятор, то проще показать пользователю цифровую клавиатуру. А если нужно ввести электронный адрес, то удобнее показать клавиатуру, где уже есть символ @. Ну а если ваше приложение пишется для котов, то достаточно вывести только те буквы, из которых можно составить слова Мяу и Жрать давай (к сожалению, такой клавиатуры еще нет, но Google работает в этом направлении).

Цукерберг рекомендует:  Разработка и запуск мобильного приложения в США

У элемента EditText на этот случай есть атрибут inputType:

В данном случае с атрибутом inputType=»textCapWords» каждый первый символ предложения автоматически будет преобразовываться в прописную. Удобно, не так ли?

Если вам нужен режим CapsLock, то используйте значение textCapCharacters и все буквы сразу будут большими при наборе.

Для набора телефоного номера используйте phone, и тогда вам будут доступны только цифры, звездочка (*), решетка (#).


Для ввода веб-адресов удобно использовать значение textUri. В этом случае у вас появится дополнительная кнопочка .com (при долгом нажатии на нее появятся альтернативные варианты .net, .org и др.).

  • Вот вам целый список доступных значений (иногда различия очень трудно различимы)

Позволяют ограничить количество строк текста, которое можно ввести в текстовом поле

Позволяет задать максимальное количество символов для ввода

Основной метод класса EditText — getText(), который возвращает текст, содержащийся в окне элемента EditText. Возвращаемое значение имеет специальный тип Editable, а не String.

Соответственно, для установки текста используется метод setText().

Большинство методов для работы с текстом унаследованы от базового класса TextView: setTypeface(null, Typeface), setTextSize(int textSize), SetTextColor(int Color).

У EditText есть специальные методы для выделения текста:

Предположим, нам нужно выделить популярное слово из трёх букв в большом слове (это слово «кот», а вы что подумали?).

// выделяем 4, 5, 6 символы edit.setSelection(3, 6);

У EditText есть специальные методы для выделения текста:

Предположим, нам нужно выделить популярное слово из трёх букв в большом слове (это слово «кот», а вы что подумали?).

  • Обработка нажатий клавиш

Для обработки нажатий клавиш необходимо зарегистрировать обработчик View.OnKeyListener, используя метод setOnKeyListener() элемента EditText. Например, для прослушивания события нажатия клавиши Enter во время ввода текста пользователем (или котом), используйте следующий код:

  • Сравнение текстовых полей при наборе текста

Другой вариант — представьте себе, что у вас есть два текстовых поля для ввода пароля и повторный ввод для его подтверждения. Добавим также элемент TextView, в котором будем отображать информацию о том, совпадают ли введенные пароли или нет. Мы будем проверять на совпадение строки в момент набора текста пользователем.

В этом примере пользователь вводит сначала любой пароль в первом поле. Когда он начинает вводить пароль во втором поле, то после каждого введенного символа идет проверка на совпадение паролей и присваивает соответствующий текст элементу TextView. Пустой ли EditText

  • Чтобы проверить, пустой ли EditText, можно воспользоваться кодом:
  • Также можно проверять длину текста, если она равно 0, значит текст пуст.
  • Убрать фокус с текстового поля


Если вам нужно убрать мигающий курсор с текстового поля, то можно пойти на хитрость. Добавьте перед EditText в файле разметки следующий код:

Этот элемент заберёт на себя фокус. Также попробуйте прописать в манифесте для нужной активности строчку andro . Удалить текст при получении фокуса

Если логика вашего приложения требует убрать текст из EditText при получении фокуса, то вам необходимо отслеживать момент получения этого фокуса

Виджет AutoCompleteTextView — это текстовое поле с автозаполнением и возможностью редактирования вводимого текста. Использование виджета удобно в том случае, когда требуется ускорить процесс ввода текста.

На панели инструментов элемент можно найти в той же папке Text Fields.

AutoCompleteTextView является подклассом EditText, поэтому доступны все возможности форматирования и редактирования текста родительского класса, описанного выше.

Дополнительно, у AutoCompleteTextView есть свойство completionThreshold для указания минимального числа символов, которое должен ввести пользователь, чтобы включилась функция автозаполнения. Для связывания с данными необходимо задействовать адаптер, содержащий список значений через метод setAdapter().

Для упрощения создадим статический массив строк с именами котов и свяжем его через адаптер с нашим элементом в Java-коде. В реальных приложениях лучше использовать строковые ресурсы.

Если вы напечатаете два символа му, то появится выпадающий список с вариантами слов для продолжения. Дальше текст можно не набирать, а просто коснуться нужного варианта и готовый текст сразу вставится в текстовое поле. Вот так все просто и работает.

  • Удалить текст при получении фокуса

Button

Кнопка — один из самых распространенных элементов управления в программировании. Наследуется от Textview и является базовым классом для класса СompoundButton. От класса CompoundButton в свою очередь наследуются такие элементы как CheckBox, ToggleButton и RadioButton. В Android для кнопки используется класс android.widget.Button. На кнопке располагается текст и на кнопку нужно нажать, чтобы получить результат. Альтернативой ему может служить элемент ImageButton (android.widget.ImageButton), у которого вместо текста используется изображение.

CompoundButton

Элемент управления ToggleButton по своей функциональности похож на флажок (checkbox) или переключатель (radiobutton) — Это кнопка, которая может находиться в одном из двух состояний: активна (On) или неактивна (Off). По умолчанию на кнопке написано Оn, если она активна, и Off — если нет. По внешнему виду это обычная кнопка с декоративной полоской в нижней части, которая подсвечивается в включенном состоянии (имитация LED-индикатора).

Если надписи On/Off для вашей программы не подходят, их можно изменить при помощи свойств Text on (атрибут android:textOn) и Text off (атрибут android:textOff). Поскольку надписи Оn и Off на кнопке-переключателе являются отдельными атрибутами, атрибут android: text не используется, он доступен, так как наследуется от ТextView, но в данном случае без него можно обойтись. В программном коде им соответствуют методы setTextOff() и setTextOn().

По умолчанию, ToggleButton находится в выключенном состоянии, чтобы его «включить», установите свойство checked в значение true. Свойству соответствует метод setChecked(boolean checked).

Основное событие ToggleButton — изменение состояния кнопки onCheckedChanged().

Напишем демонстрационную программу с использованием ToggleButton. Добавим на форму метку, изображение и кнопку-переключатель:

Для создания обработчика события изменения состояния кнопки необходима реализация интерфейса CompoundButton.OnCheckedChangeListener. Интерфейс имеет единственный метод onCheckedChanged(), который необходимо переопределить в нашем классе. При обработке события для определения состояния используется параметр isChecked.

CheckBox

Элемент CheckBox является флажком, с помощью которого пользователь может отметить(поставить галочку) определенную опцию. Очень часто флажки используются в настройках, когда нужно выборочно выбрать определенные пункты, необходимые для комфортной работы пользователю.

Для экспериментов воспользуемся программой «Счетчик ворон», которую писали при изучении щелчка кнопки.

Как вы помните, в программе была кнопка и текстовое поле. Добавим еще два элемента CheckBox, а также четыре текстовые метки TextView. Нам нужно постараться, чтобы элементы были аккуратно сгруппированы. Для этой цели воспользуемся вложенными LinearLayout. Заодно применим интересный прием — мы не будем использовать текст у флажков CheckBox, а воспользуемся текстовыми метками с разными размерами шрифтов. Верхняя метка с крупным шрифтом будет указывать на основную функциональность флажка, а нижняя метка с мелким шрифтом будет использоваться в качестве своеобразной подсказки, в которой содержится дополнительная информация для пользователя.

Флажки в нашем приложении нужны для того, чтобы пользователь мог менять вывод текста в текстовом поле. По желанию, можно выводить текст красным цветом и жирным стилем по отдельности или в совокупности. Для этого нам нужно добавить дополнительные строчки кода в обработчик щелчка кнопки.

Запустите проект и попробуйте снимать и ставить галочки у флажков в разным комбинациях, чтобы увидеть, как меняется текст после щелчка кнопки. Код очень простой — проверяется свойство isChecked. Если галочка у флажка установлена, то свойство возвращает True и мы меняем цвет (красный) или стиль текста (жирный). Если флажок не отмечен, то свойство возвращает False, и мы используем стандартные настройки текста.

ToggleButton


RadioButton

ImageView

ImageView — Компонент отображающий произвольное изображение, например иконки. Класс ImageView можете загружать изображения из различных источников. Виджет ImageView предназначен для отображения графики.

ImageView является базовым элементом-контейнером для использования графики. Можно загружать изображения из разных источников, например, из ресурсов программы, контент-провайдеров. В классе ImageView существует есть несколько методов для загрузки изображений:

Для загрузки изображения в XML-файле используется атрибут android:src.

Также вам часто придется использовать методы, связанные с размерами и масштабированием: setMaxHeight(), setMaxWidth(), getMinimunHeight(), getMinimunWidth(), getScaleType(), setScaleType().

  • Загрузка изображения из интернета (Не работает с Android 4.0)

Загрузки изображения по его URL в ImageView. Разместим на форме текстовое поле и контейнер для изображения.

Урок 3. Верстка экранов. Виды Layout

В прошлых уроках мы разбирались с установкой и настройкой Android Studio и со структурой проекта Android. Теперь давайте перейдем к более интересной части — к созданию приложений. Но для этого нам потребуется узнать, из чего же состоят приложения, а точнее, та часть, которую видят пользователи.

Визуальные части приложения

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

Два самых важных понятия в интерфейсе Android — это Activity и View.

Activity — это та часть приложения, с которой взаимодействует пользователь. Можно назвать ее «окном» в терминологии десктопных ОС (хотя фактически это не окно, Window в андроиде тоже есть, но с ним мало кто из разработчиков сталкивался). Внутри Activity расположены дочерние элементы интерфейса. К activity мы позже обязательно вернемся и рассмотрим это понятие в отдельном уроке.

View — элемент интерфейса. То же самое, что и в любой другой ОС. Это может быть кнопка, поле для ввода текста, контейнер для картинки, контейнер для других View и т.д.

Цукерберг рекомендует:  Грамотный веб-дизайн + SEO

Так же немаловажный элемент — ViewGroup. Напрямую начинающие с ним не сталкиваются, обычно с этим классом работают более опытные разработчики. Фактически, ViewGrop — это модифицированный View, созданный для того, чтобы служить контейнером для других View. Тут мы уже знакомимся с понятием Layout.

Layouts в Android

Layout — общее название для нескольких наследников ViewGroup. Лэйауты служат контейнерами для View, и созданы они для того, чтобы мы могли удобно располагать всяческие кнопочки, поля для ввода текста и прочие элементы интерфейса.

«Самых нужных» лэйаута всего 3:

  • LinearLayout
  • FrameLayout
  • RelativeLayout

В большинстве приложений они используются в качестве layout’ов в, наверное, 90% случаев.

Конечно же, на самом деле их больше — у класса ViewGroup 44 прямых наследника. Но нам для начала хватит и этих трех, остальные мы обязательно рассмотрим позже.

Посмотрите на следующий рисунок:

Кнопки, поле для ввода — это View. Зеленая рамочка вокруг кнопок — это границы ViewGroup, внутри которой находятся кнопки. В свою очередь, ViewGroup с кнопками и поле для ввода находятся внутри другого ViewGroup, границы которого обозначены красным.

А весь «фон» в виде клеточек — это Activity, внутри которого находятся все остальные элементы интерфейса.

Создание интерфейса в Android


В Android принято использовать декларативный подход к созданию интерфейса, когда это возможно. Под декларативным подходом подразумевается описание интерфейса в XML-файлах. Файлы находятся в директории res/layout/:

Так же есть особый подход к именованию файлов. В отличие от исходников на Java, в ресурсах не предусмотрено вложенности директорий, поэтому все файлы лежат в одной директории и чтобы не запутаться в них, когда их много, приняты следующие названия:

  • activity_name.xml — для Activity
  • fragment_name.xml — для фрагментов(о них мы обязательно поговорим в следующих статьях)
  • view_name.xml — для View

Здесь «name» — имя элемента интерфейса. Например, для LoginActivity файл будет называться activity_login.xml, для MainFragment — fragment_main.xml и т. д.

При создании проекта с пустой Activity у нас по умолчанию создастся MainActivity и xml-файл с описанием этой активити. Давайте откроем этот файл:

Тут вы видите RelativeLayout — главный контейнер для всего контента в Activity, и TextView, который находится внутри этого контейнера.

Обратите внимание на атрибуты layout_width и layout_height. Этими атрибутами, как нетрудно догадаться, мы задаем ширину и высоту элемента. В абсолютных значениях они задаются редко, как правило используются две константы:

  • match_parent — элемент будет занимать все доступное ему пространство.
  • wrap_content — элемент будет использовать столько места, сколько требуется для отображения контента внутри. Кнопка, например, будет иметь размер текста + отступы.

LinearLayout

LinearLayout, как следует из названия, располагает дочерние элементы в «линейном» порядке, т.е. друг за другом. Линейный лэйаут может быть горизонтальным или вертикальным.

Давайте посмотрим на практике, что это такое.

Удалим весь шаблонный код, и вставим вместо него следующий код:

Как видите, мы создали LinearLayout и внутри него поместили три кнопки. Обратите внимание на атрибут orientation у LinearLayout. Он обозначает «направление» контента в лэйауте. Атрибут orientation может принимать два значения — «horizontal» и «vertical«. Как нетрудно догадаться, в первом случае дочерние элементы будут расположены горизонтально слева направо, во втором — вертикально сверху вниз.

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

Теперь давайте изменим ориентацию с горизонтальной на вертикальную:

После запуска проекта мы увидим следующее:

Т.е. теперь элементы расположены вертикально.

У LinearLayout (а точнее, у его дочерних View) есть еще один интересный атрибут — layout_weight. Этим атрибутом мы говорим лэйауту, сколько пространства должен занимать элемент. В качестве значения можно использовать любое число. Например, если мы хотим равномерно распределить пространство между двумя кнопками, мы можем задать обеим кнопкам layout_weight = 1. Тогда они разделят имеющееся пространство на две равных части. Если мы зададим одной кнопке вес = 1, а второй = 2, то вторая кнопка будет занимать в 2 раза больше места, чем первая. Чтобы окончательно понять, как это работает, давайте посмотрим на примере:

Также при использовании атрибута layout_weight рекомендуется заменить ширину (если лэйаут горизонтальный) или высоту (если лэйаут вертикальный) на 0dp. О том, что такое dp, мы поговорим в следующих уроках.

Как видите, первым двум кнопкам мы задали вес = 1, а третьей = 2. Сумма весов = 4, соответственно, первые две кнопки займут левую половину экрана, а третья — правую половину, т.е. ее ширина будет в два раза больше других кнопок. Посмотрим, что получилось:

Получилось не очень симпатично, потому что у первых двух кнопок текст не влез в заданную ширину и часть перенеслась на новую строку, поэтому эти кнопки стали «выше». Однако, суть ясна — третья кнопка в два раза шире, чем остальные.

Для вертикальных лэйаутов это работает точно так же, только меняется, соответственно, высота.

FrameLayout

Пожалуй, это самый простой Layout. Все, что он умеет — располагать элементы друг над другом (по оси «z»). Давайте вспомним немного математики, а точнее, систему координат.

В двухмерном пространстве у нас есть две оси — X и Y. X идет слева направо, Y снизу вверх. В Android немного иначе, Y идет сверху вниз.


В трехмерном пространстве добавляется ось Z. Она идет «на нас». В интерфейсах Z обозначает глубину. Напрямую «глубина» задается редко, однако, например, во FrameLayout она есть. Давайте посмотрим на примере, как это работает. Измените код, чтобы он выглядел вот так:

Запустим проект, и увидим следующее:

Первым мы создали красный квадрат. Он находится «дальше» всех от нас. Вторым создали зеленый, он находится «над» красным квадратом. Ну и больше всех координата Z у синего квадрата.

Если мы поменяем элементы местами, у них изменится и координата Z.

У FrameLayout, как и у многих других лэйаутов, включая LinearLayout, есть понятие gravity. «Гравитация» может быть задана двумя способами:

  • Атрибутом gravity у лэйаута. В таком случае она будет применена для всех дочерних элементов
  • Атрибутом layout_gravity у дочернего элемента. Тогда она будет применена только для этого элемента.

Gravity задает положение элемента внутри контейнера. Гравитация может быть следующей:

  • bottom — элемент «прижимается» к нижней границе контейнера.
  • center — элемент располагается в центре контейнера
  • center_horizontal — элемент находится в центре по оси X
  • center_vertical — элемент находится в центре по оси Y
  • end — элемент находится «в конце» контейнера. Обычно это означает, что он будет находиться справа, но на локали с написанием справа-налево он будет находиться слева.
  • start — элемент находится «в начале» контейнера. Обычно — слева, на RTL локалях — справа.
  • top — элемент «прижимается» к верхней границе контейнера.

left и right использовать не рекомендуется, поскольку это вызовет проблемы с версткой на RTL локалях.

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

Итак, давайте же попробуем на практике поработать с гравитацией. К сожалению, сам FrameLayout, в отличие от многих других контейнеров, не поддерживает атрибут gravity, однако гравитацию можно реализовать через дочерние элементы. Добавьте атрибут layout_gravity со значением center для каждого дочернего View:

Как использовать ScrollView в Andro >

У меня есть файл макета XML, но текст более чем соответствует размеру экрана. Что мне нужно сделать, чтобы создать ScrollView ?

Просто сделайте макет верхнего уровня ScrollView:

Есть два варианта. Вы можете сделать весь макет прокручиваемым или прокручивать только TextView.

Для первого случая,

Или, как я уже сказал, вы можете использовать scrollView только для TextView.

ScrollView – это особый тип FrameLayout, в котором он позволяет прокручивать список представлений, занимающих больше места, чем физический дисплей. Я просто добавляю некоторые атрибуты.

Как уже было сказано выше, вы можете поместить его в ScrollView … и если вы хотите, чтобы прокрутка была горизонтальной, поместите ее внутри HorizontalScrollView … и если вы хотите, чтобы ваш компонент (или макет) поддерживал обе вставляемые внутри них как это :

И с установкой layout_width и layout_height .

Поместите свой TableLayout внутри макета ScrollView. Это решит вашу проблему.

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

Andro >by editorial team ·

Hello and welcome to Android ScrollView Tutorial With Example.

There are some cases where you need to display so much vertical information that it can not be displayed in the screen of the device.

For example, you are showing the details about any restaurant. Here, first you will show a big rectangle photo of the restaurant, then the name, address, opening hours, food menu, pricing etc.


Screen of mobile device has not enough space to show all these information at once. Here, Scroll view will help you.

If you put all this information inside the scroll view, user will be able to scroll down or up vertically to show all the information.

Scroll view enable us to create vertical scrollable layout. For horizontal scrolling, we need to use Horizontal Scroll View.

ScrollView is a subclass of frame layout. As frame layout allows only one child, you can place only one child view in scroll view. Child of scroll view can contain entire view hierarchy.

Цукерберг рекомендует:  Php - Названия стран из существительного в прилагательное

For example, You can add linearlayout with vertical orientation as a child of scrollview. Inside this linearlayout, you can add as many user interface widgets as you want.

RecyclerView and ListView have scrolling effect by default. So you should never add both these elements to the scrollview. It will led to poor user interface performance and a poor user experience.

Similarly, in the child element of ListView or RecyclerView, it is advisable not to use ScrollView. Such thing will also confuse user about scrolling purpose.

You should use the scrollview when you have specific or static number of the children.

If you have dynamic number of children, something like result for “restaurants near me”.

Here, number of restaurants will be different in the different locations. In this case, you can use ListView or RecyclerView.

XML Property

Following is the XML representation of the scrollview.

Реализация адаптивного пользовательского интерфейса в Andro >

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

Алгоритм пользовательского интерфейса зависит от макета, который в данный момент отображается. Например, если приложение работает в двухпанельном режиме, то при нажатии на элемент в левой панели содержание отобразится в правой. В однопанельном режиме содержание откроется отдельно (в другой активности).

Определение текущего макета

Так как в реализации макетов существуют отличия, первое, что необходимо сделать, – определить, какой макет отображается в данный момент. Например, работает ли приложение в однопанельном или двухпанельном режиме. Для этого создадим запрос о том, существует ли данное представление и отображается ли оно в настоящий момент:

Обратите внимание: представленный выше код содержит запрос о том, доступна ли панель article, поскольку это удобнее, чем писать отдельные запросы для каждого макета.

Кроме того, для работы с учетом существующих компонентов можно также проверять их доступность, прежде чем выполнять с ними какие-либо операции. Например, в учебном приложении News Reader есть кнопка, которая служит для доступа в меню, однако она отображается только в операционных системах Android версии ниже, чем 3.0, потому что в последующих версиях ее функцию выполняет элемент ActionBar на уровне API 11 и выше. Чтобы проверить наличие этой кнопки, добавим прослушиватель событий с помощью следующего кода:

Дальнейшие действия в зависимости от текущего макета

Результаты некоторых операций зависят от текущего макета. Например, если в приложении News Reader в двухпанельном режиме нажать на заголовок в списке, то статья откроется в правой панели. Если же интерфейс работает в однопанельном режиме, будет запущена отдельная активность:

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

Повторное использование фрагментов в других активностях

Одним из примеров повторяющегося фрагмента является реализация части интерфейса как панели в одних конфигурациях и как отдельной активности в других. Например, если приложение News Reader работает на достаточно большом экране, текст новостной статьи отображается в правой панели, а если на маленьком, то он открывается в отдельной активности.

В таких случаях следует повторно использовать подкласс Fragment в нескольких активностях. Например, в двухпанельном макете используется подкласс ArticleFragment :

Он же (без макета) используется при работе на маленьком экране (активность ArticleActivity ):

Результат будет таким же, как если бы мы объявили фрагмент в макете XML, однако в этом случае макет XML не требуется, так как фрагмент article является единственным компонентом этой активности.


При создании фрагментов важно не привязывать их строго к конкретной активности. Для этого можно определить интерфейс с абстрактным описанием всех необходимых способов взаимодействия фрагмента с активностью, в которой он содержится. Затем этот интерфейс нужно реализовать в самой активности.

Например, именно так работает фрагмент HeadlinesFragment в приложении News Reader:

Затем, когда пользователь выбирает заголовок, фрагмент оповещает об этом не указанную в коде активность, а заданный ею прослушиватель:

Этот метод рассматривается подробнее в разделе Поддержка планшетных ПК и мобильных телефонов.

Обработка изменений конфигурации экрана

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

Например, на типичном планшетном ПК с размером экрана 7 дюймов под управлением ОС Android 3.0 или более поздней версии при вертикальной ориентации статья в приложении News Reader открывается с помощью отдельной активности, а при горизонтальной используется двухпанельный макет.

Это означает, что если пользователь держит планшетный ПК вертикально и на экране запущена активность для просмотра статьи, приложение должно уметь определить, что ориентация была изменена на горизонтальную. Затем оно должно соответствующим образом отреагировать на изменение, то есть завершить эту активность и вернуться к основной активности, чтобы содержание отобразилось в двухпанельном макете:

Working with the ScrollView

When an app has layout content that might be longer than the height of the device and that content should be vertically scrollable, then we need to use a ScrollView.

To make any content vertically scrollable, simply wrap that content in a ScrollView :

Note that a ScrollView can only contain a single child element so if you need multiple things to be scrollable, you need to wrap that content into a layout as shown above.

In certain situations, you want to position content beneath the end of the scrollable content area. For example for a «terms of service» where you can only accept once you’ve scrolled through all the content. In this case, you might need to apply the android:fillViewport property to «true». Read this post by Romain Guy for a detailed look at this use case.

Note that a TextView doesn’t require a ScrollView and if you just need a scrolling TextView simply set the scrollbars property and apply the correct MovementMethod :

and then in the activity:

Now the TextView will automatically scroll vertically.

In other cases, we want content to horizontally scroll in which case we need to use the HorizontalScrollView instead like this:

and now you have a horizontally scrolling view.

Adding a ScrollView within another ScrollView can be difficult. Most of the times it won’t end well. You will end up adding few workarounds. Instead, use the NestedScrollView as outlined here. A working sample can be found here as this is very useful when working with CoordinatorLayout

Created by CodePath with much help from the community. Contributed content licensed under cc-wiki with attribution required. You are free to remix and reuse, as long as you attribute and use a similar license.

ScrollView для всего интерфейса

Я реализовал интерфейс с двумя scrollviews-HorizontalScrollView для некоторых изображений и вертикальный scrollView с несколькими textViews. Теперь я хочу вертикальный scrollView для всего интерфейса. Как я могу это сделать? Пожалуйста, помогите мне. Вот .xml-файл для интерфейса :-

2 ответа

Сделать ScrolView в качестве родителя, который помогает прокрутки по вертикали и внутри этого первого элемента будет ваш горизонтальный вид прокрутки, который сделает ваш вид прокрутки по горизонтали

Это не рекомендуется. На самом деле, рекомендуется не делать этого, и не поддерживается из коробки. То, что вы могли бы сделать, это что-то вроде следующего:

Но это действительно не рекомендуется. Вещи могут получить fiddly очень быстро, если вы попробуете это в любом случае. Представьте, что внутренний scrollview занимает весь экран на небольших устройствах, удачи прокрутки внешнего.

Добавление полос прокрутки

Класс TextView использует свою собственную прокрутку и в принципе не требует добавления отдельных полос прокрутки, но применение видимых полос прокрутки вместе с TextView (или любым другим элементом или контейнером, размеры которого больше размера экрана мобильного устройства) улучшает внешний вид и повышает удобство использования приложения.

Полосы прокрутки в Android представляют виджеты ScrollView и HorizontalScrollView, которые являются контейнерными элементами и наследуются от viewGroup, как показано на рисунке.

Иерархия классов для ScrollView и HorizontalScrollView

Элементы ScrollView и HorizontalScrollView— это контейнеры типа FrameLayout, что означает, что в них можно разместить только одно дочернее представление. Этот дочерний элемент может, в свою очередь, быть контейнером со сложной иерархией объектов. В качестве дочернего элемента для полос прокрутки обычно используют LinearLayout с вертикальной или горизонтальной ориентацией элементов.

Виджет ScrollView, несмотря на свое название, поддерживает только вертикальную прокрутку, поэтому для создания вертикальной и горизонтальной прокрутки необходимо использовать ScrollView в сочетании с HorizontalScrollView. Обычно ScrollView используют в качестве корневого элемента, а HorizontalScrollView — дочернего.

Рассмотрим создание полос прокрутки на практике. В среде Eclipse создайте новый проект и в диалоге Create New Project введите следующие значения:

  • Project name — ScrollsApp;
  • Application name — Scrolls Sample;
  • Package name — com.samples. scrolls;
  • Create Activity — ScrollsActivity.

Откройте файл разметки main.xml и создайте структуру разметки, разместив в ней ScrollView, HorizontalScrollView и TextView, как показано в листинге.

Листинг. Файл разметки main.xml

В классе scroilviewActivi ty в теле метода onCreate () создайте ссылку на элемент Textview, объявленный в XMLразметке, и запишите в него методом setText () достаточно большой текст, который гарантированно не поместится в видимые размеры экрана устройства. Код класса деятельности ScroilviewActivi ty представлен в листинге.

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих