Layout windth и Layout heigth.

На них можно указывать абсолютные значения, а можем использовать константы.

Абсолютныезначения:

- dp и dip – Dencity-indenperendent Pixels. Абстракная ЕИ, позволяющая приложениям выглядеть одинаково на разных экранах и разрешениях.

- px – пиксель, не рекомендуется использовать так как на разных экранах приложение будет выглядеть по-разному.

- mm – миллиметр, определяется по физическому размеру экрана.

- in – дюйм, определяется по физическому размеру экрана.

Константы:

- math_parent (fill_parent) – означает, что элемент займет всю доступную ему в родительском элементе ширину и высоту.

- wrap_content – ширина и высота элемента будет определятся его содержимым.

Расположение View-элементов на экране зависит от ViewGroup (Layout), в которой они находятся. LinerLayout – отображает View –элементы в виде одной строки (Horizontal) или одного столбца (Vertical). Этот вид ViewGroup по умолчанию предлагается при создании новых layout-файлов. Он достаточно удобен и гибок, чтобы создавать экраны различной сложности. [A3] [A4]

Файл Res / layout / activity_main.xml

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activitty_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/acivity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="@color/background"
tools:context="com.a2210.alive.mydailyscheduller.MainActivity">

<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
android:dividerHeight="@dimen/divider"
android:divider="@color/colorPrimary"
android:id="@+id/li"/>
</LinearLayout>

Суть приложения: считывание информации о занятиях с сайта университета. Приложение должно посылать запрос который содержит сведения о группе на сайт БГУ и получать ответ в виде файла с расписанием.

Выбор инструмента для получения данных

Для получения данных парсеры взаимодействуют с разметкой документов, написанной на языке разметки HTML (либо XML). Существует 2 вида парсеров:

1) SAX (англ. Simple API for XML) – способ последовательного чтения и/или записи HTML/XML-файлов. В ходе последовательного чтения SAX-парсер сообщает вызвавшему приложению о встреченных элементах разметки, а программист в своюочередь описывает нужную обработку данных событий.

2) DOM (англ. Document Object Model) позволяет представить любой документ известной структуры в виде дерева узлов, каждый узел которого представляет собой элемент, атрибут или иной объект. Узлы связаны между собой отношениями «родитель – потомок». DOM- парсеры сначала загружают весь документ разметки, а на выходе представляют дерево, из которого можно получить доступ к содержимому документа.

Библиотека Jsoup

Jsoup это open-source Java библиотека для работы с реальным HTML. Она обеспечивает очень удобный API для извлечения и манипулирования данными, используя лучшие DOM, CSS, и JQuery-подобные методы. Jsoup реализует WHATWG HTML5 спецификацию, и разбирает HTML в ту же модель DOM, как это делают современные браузер вроде Chrome и Firefox. Вот некоторые из полезных функций Jsoup библиотеки:

- Jsoup может очистить и разобрать HTML из URL, файла или строки.

- Jsoup может найти и извлечь данные используя обход DOM или CSS селекторы.

- Jsoup позволяет манипулировать HTML элементами, атрибутами и текстом.

- «Аккуратный» HTML на выходе: при разборе HTML-текста библиотека исправляет ошибки наподобие незакрытых тегов.

Jsoup предназначен для работы с различными видами HTML существующими в реальном мире, включая должным образом подтвержденный HTML c неполным неподтвержденным набором тэгов. Одно из основных преимуществ Jsoup это его надежность.С помощью него очень просто разобрать HTML, все что Вам нужно это вызвать статический метод Jsoup.parse() и передать в него Вашу HTML строку. Jsoup предоставляет несколько перегруженных методов parse() для чтения HTML из строки, файла, из базового URI, из URL и из InputStream. Вы также можете указать кодировку, для корректного чтения HTML файла.[A5]

Получение данных

Для получения данных используется сторонняя Java-библиотека jsoup. Кроме того, необходимо предоставить приложению доступ в Интернет. Для этого в файл AndroidManifest.xml нужно дописать следующую строку:

<uses-permissionandroid:name="android.permission.INTERNET"/>

В самом классе Parser надо прописать импорт следующих классов:

importjava.util.List;

importorg.jsoup.nodes.Document;

importorg.jsoup.nodes.Element;

importorg.jsoup.nodes.Node;

importorg.jsoup.parser.CharacterReader;

importorg.jsoup.parser.HtmlTreeBuilder;

importorg.jsoup.parser.ParseError;

importorg.jsoup.parser.ParseErrorList;

importorg.jsoup.parser.ParseSettings;

importorg.jsoup.parser.Tokeniser;

importorg.jsoup.parser.TreeBuilder;

importorg.jsoup.parser.XmlTreeBuilder;

Информация о расписании университета берется с сайта «bsu.ru», и для начала работы необходимо подключитьсяк нужной странице и получить объект класса Document: получаем данные методом GET

org.jsoup.nodes.Document doc = Jsoup.connect("http://bsu.ru/rasp/?g="+groupeNum).get();

После подключения нужно извлечь требуемую информацию:

Elements elements = doc.select("div.week");/**разбиваемпонеделям**/

Метод select() позволяет получить нужные теги.

Далее в цикле для каждого элемента списка извлекается нужная информация:

for (Element element : elements) {

Elements el = element.select("table.rasp_week");

for (Element element1 : el) {

Elements elements1 = element1.select("td");

for (Element element2 : elements1) {

Elements day = element2.select("h3.rasp_day");/*получаемдень**/

for (Element element3 : day) {d = element3.text();}

Elements time = element2.select("td.rasp_time");/**время**/

for (Element element3 : time) {t = element3.text();}

Elements subj = element2.select("td.rasp_subj");/**предмет**/

for (Element element3 : subj) {s = element3.text();}

Elements type = element2.select("td.rasp_subj_type"); /**тип**/

for (Element element3 : type) {st = element3.text();}

Elements aud = element2.select("td.rasp_aud");/**номераудит**/

for (Element element3 : aud) {a = element3.text();}

Elements week = el.select("table.rasp_week").prev();/*№ недели*/

for (Element element3 : week) {w = element3.text();}

Elements name = element2.select("td.rasp_aud").next();/**следующийэлементпосленомерааудитории - имяпреподователя**/

for (Element element3 : name) {n = element3.text();

/**если день недели совподает то вывести то формируем список**/

if (dayOfWeek.equals(d)) {scheduler = w + "\r\n" +

"Время: " + t + "\r\n" + "Название предмета: " + s + "\r\n" + "Тип пары: " + st +

" Аудитория: " + a + "\r\n" + "Имя преподавателя: " + n + "\r\n\r";

my.add(scheduler); /**добавляем строку в список строк **/

Объектая модель документа

Когда вы открываете веб-страницу в браузере, он получает исходный текст HTML и разбирает (парсит) его. Браузер строит модель структуры документа и использует её, чтобы нарисовать страницу на экране. Вы можете читать её и изменять. Она изменяется в реальном времени – как только вы её подправляете, страница на экране обновляется, отражая изменения.

Структура документа

Можно представить HTML как набор вложенных коробок. Теги включают в себя теги, которые в свою очередь включают теги, или текст.

Структура данных, использующаяся браузером для представления документа, отражает его форму. Для каждой коробки есть объект, с которым мы можем взаимодействовать и узнавать про него разные данные – какой тег он представляет, какие коробки и текст содержит. Это представление называется Document Object Model (объектная модель документа), или сокращённо DOM. Мы можем получить доступ к этим объектам через глобальную переменную document. Её свойство documentElement ссылается на объект, представляющий тег . Он также предоставляет свойства head и body, в которых содержатся объекты для соответствующих элементов.

Деревья

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

У типичного дерева есть разные узлы. Называется структура данных деревом, когда она разветвляется, не имеет циклов (узел не может содержать сам себя), и имеет единственный ярко выраженный «корень». В случае DOM в качестве корня выступает document.documentElement.

У каждого узлового объекта DOM есть свойство nodeType, содержащее цифровой код, определяющий тип узла. У обычных элементов он равен 1, что также определено в виде свойства-константы document.ELEMENT_NODE. У текстовых узлов, представляющих отрывки текста, он равен 3 (document.TEXT_NODE). У комментариев - 8 (document.COMMENT_NODE). Узлы DOM содержат много ссылок на соседние.

Согласно DOM-модели, документ является иерархией. Каждый HTML-тег образует отдельный элемент-узел, каждый фрагмент текста - текстовый элемент, и т.п.

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

Самый внешний тег -<html>, поэтому дерево начинает расти от него. Внутри <html> находятся два узла: <head> и <body> - они становятся дочерними узлами для <html>

Теги образуют узлы-элементы (element node). Текст представлен текстовыми узлами (text node). И то и другое - равноправные узлы дерева DOM.

Корневым элементом иерархии является html. У него есть два потомка. Первый - head, второй - body. Дерево образуется за счет элементов-узлов - тегов HTML.

HTML

Язык разметки гипертекста HTML (Hyper Text Markup Language) является основой Всемирной паутины. Именно он является основой создания веб-страниц. С помощью HTML осуществляется логическое форматирование документа, и только для этих целей он и может использоваться.

Структура html-документа

HTML-документы строятся на основе тегов, которые структурируют документ. Обычно теги бывают парными, т. е. состоят из открывающего и закрывающего тега, хотя бывают и исключения. Имена открывающих тегов заключаются в угловые скобки < … >, а закрывающих помимо этого еще и предваряются знаком слеш </ … >.

HTML-документ обрамляется парными тегами <html> … </html>. Кроме того, для обеспечения корректного отображения документа современный стандарт требует использования одиночного тега <!DOCTYPE>, имеющего следующую структуру:

<!DOCTYPEHTMLPUBLIC>

HTML-документы состоят из заголовка и тела документа. Заголовок и тело документа представляются парными тегами <head> … </head> и <body> … </body>, соответственно. Таким образом, каркас HTML-документа будет иметь следующую структуру:

<html>

<head>

содержание заголовка

</head>

<body>

содержание тела документа

</body>

</html>

Заголовок включает в себя несколько специализированных тегов, основными из которых являются <title> … </title> и <meta> … </meta>

Тег <title> содержит заголовок документа, который будет выводится в заголовочной части окна браузера. Тег <meta> содержит специальную информацию, такую как тип кодировки:

<metahttp-equiv="Content-Type" content="text/html; charset=windows-1251">

а так же список ключевых слов и информацию о содержании сайта:

<meta name="keywords" content="списокключевыхслов">

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

В рассмотренных тегах name="keywords" и content="список ключевых слов" являются атрибутами тегов, которые конкретизируют их. Например, атрибуты могут указывать, что текст, заключенный в данном теге, при отображении должен выравниваться по центру. Атрибуты записываются сразу после имени тега, причем значения атрибутов заключаются в кавычки. Атрибутов у тега может быть несколько, но могут и вовсе отсутствовать.

Таблицы

Таблицы являются одной из основных структур, используемых для структурирования информации в HTML-документах. Кроме того, таблицы часто используются для организации структуры страницы, и хотя сейчас такое использование таблиц признано устаревшем и не рекомендуемым, оно до сих пор применяется многими веб-дизайнерами.

Наши рекомендации