Урок 16. Программное создание экрана. LayoutParams
Урок 16. Программное создание экрана. LayoutParams
Последний раз редактировалось damager82 28 апр 2017, 10:52, всего редактировалось 6 раз.
Re: Урок 16. Программное создание экрана. LayoutParams
А если мы хотим отступ не в пикселах?
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 16. Программное создание экрана. LayoutParams
Тут назрело парочка вопросов, если можно:
1.
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout.LayoutParams;
Я так понимаю LinearLayout это подкласс ViewGroup. Но почему тогда они в разных пакетах?
2. У вас в коде сначала отображается LinearLayout я так понимаю?
1.
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout.LayoutParams;
Я так понимаю LinearLayout это подкласс ViewGroup. Но почему тогда они в разных пакетах?
2. У вас в коде сначала отображается LinearLayout я так понимаю?
А после идет добавление элементов. Наверное все же было лучше сначала добавить элементы, а потом уже отобразить панель? Просто помню при изучении Swing это был немаловажный фактор, ибо можно было наблюдать как форма наполняется элементами. Тут наверное тоже самое, когда элементов немало. Хотя может быть ошибаюсь.setContentView(linLayout, linLayoutParam);
Re: Урок 16. Программное создание экрана. LayoutParams
1) По поводу пакетов - это надо разрабов Android спрашивать, почему они так раскидали классы.
В android.widget сложены визуальные компоненты. А android.view содержит классы, на которых работают эти компоненты.
2) Вообще, хороший вопрос ... Я не знаю как поведет себя система. Отобразит корень и начнет наполнять его элементами, или сначала полностью сформирует экран и только потом покажет. Надо копать тему.
В android.widget сложены визуальные компоненты. А android.view содержит классы, на которых работают эти компоненты.
2) Вообще, хороший вопрос ... Я не знаю как поведет себя система. Отобразит корень и начнет наполнять его элементами, или сначала полностью сформирует экран и только потом покажет. Надо копать тему.
Re: Урок 16. Программное создание экрана. LayoutParams
Поправьте меня, если я не прав, но в общей сложности можно DIP умножить на коэффициент плотности экрана.damager82 писал(а):А если мы хотим отступ не в пикселах?
Код: Выделить всё
int px = (int) (dip * getResources().getDisplayMetrics().density);
-
- Сообщения: 17
- Зарегистрирован: 27 фев 2012, 10:53
Re: Урок 16. Программное создание экрана. LayoutParams
Я бы добавил в этом уроке что такой подход является не желательным, т.к. используя ресурсы с разметкой, для разработки ГУИ, мы отделяем уровень представления от самого кода (или бизнес-логики). Что в итоге позволяет нам изменять внешний вид не затрагивая кода, можно применять оптимизированные файлы разметки под различные устройства, а не описывать все это вручную в коде. В общем плюсов у этого подхода перед описанным в уроке много.
Re: Урок 16. Программное создание экрана. LayoutParams
У меня возник вопрос. Перечитывал урок и документацию несколько раз, и все равно есть недопонимание:
" Известные нам примеры ViewGroup – это LinearLayout, TableLayout, RelativeLayout и т.д. Каждая их этих ViewGroup имеет вложенный класс LayoutParams. Базовым для этих LayoutParams является ViewGroup.LayoutParams."
Отсюда делаю выводы:
1. ViewGroup = LinearLayout.
2. У LinearLayout есть подкласс LayoutParams. Т.е. обращаться к нему через LinearLayout.LayoutParams.
"ViewGroup.LayoutParams имеет всего два атрибута: height и width."
3. Окей. LinearLayout.LayoutParams имеет всего два аттрибута, height и width.
" Его подкласс ViewGroup.MarginLayoutParams наследует два этих атрибута и имеет свои четыре: bottomMargin, leftMargin, rightMargin, topMargin."
4. У LinearLayout.LayoutParams есть подкласс - MarginLayoutParams. К нему обращаться так: LinearLayout.LayoutParams.MarginLayoutParams .
5. Этот подкласс наследует свойства LinearLayout.LayoutParams + свои четыре.
" Класс LinearLayout.LayoutParams в свою очередь является подклассом ViewGroup.MarginLayoutParams, наследует от него уже 6 аттрибутов и добавляет свои два: gravity и weight. "
А вот здесь противоречие с выводом 4. Объясните пожалуйста, в чем я ошибся?
" Известные нам примеры ViewGroup – это LinearLayout, TableLayout, RelativeLayout и т.д. Каждая их этих ViewGroup имеет вложенный класс LayoutParams. Базовым для этих LayoutParams является ViewGroup.LayoutParams."
Отсюда делаю выводы:
1. ViewGroup = LinearLayout.
2. У LinearLayout есть подкласс LayoutParams. Т.е. обращаться к нему через LinearLayout.LayoutParams.
"ViewGroup.LayoutParams имеет всего два атрибута: height и width."
3. Окей. LinearLayout.LayoutParams имеет всего два аттрибута, height и width.
" Его подкласс ViewGroup.MarginLayoutParams наследует два этих атрибута и имеет свои четыре: bottomMargin, leftMargin, rightMargin, topMargin."
4. У LinearLayout.LayoutParams есть подкласс - MarginLayoutParams. К нему обращаться так: LinearLayout.LayoutParams.MarginLayoutParams .
5. Этот подкласс наследует свойства LinearLayout.LayoutParams + свои четыре.
" Класс LinearLayout.LayoutParams в свою очередь является подклассом ViewGroup.MarginLayoutParams, наследует от него уже 6 аттрибутов и добавляет свои два: gravity и weight. "
А вот здесь противоречие с выводом 4. Объясните пожалуйста, в чем я ошибся?
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 16. Программное создание экрана. LayoutParams

PS: У класса LinearLayout.LayoutParams нет подкласса MarginLayoutParams
Еще:
LinearLayout.LayoutParams происходит от ViewGroup.MarginLayoutParams а не от ViewGroup.LayoutParams. Следовательно, пункт 3 тоже не правда.Áàçîâûì äëÿ ýòèõ LayoutParams ÿâëÿåòñÿ ViewGroup.LayoutParams.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 16. Программное создание экрана. LayoutParams
KamiSempai, вы опровергли то, что я написал. Тогда, пожалуйста, объясните как правильно?
" Известные нам примеры ViewGroup – это LinearLayout, TableLayout, RelativeLayout и т.д."
и
"Вы ошиблись уже в пункте 1. ViewGroup != LinearLayout."
уже идут в разрез.
" Известные нам примеры ViewGroup – это LinearLayout, TableLayout, RelativeLayout и т.д."
и
"Вы ошиблись уже в пункте 1. ViewGroup != LinearLayout."
уже идут в разрез.
Re: Урок 16. Программное создание экрана. LayoutParams
icamys, KamiSempai имел ввиду, что один является потомком другого, но это не значит что они равны.
Большое спасибо за наглядную диаграмму
Большое спасибо за наглядную диаграмму
Re: Урок 16. Программное создание экрана. LayoutParams
У меня вопрос - такое создание экранов кто-то использует или это просто "для общего развития"? Потому как это на рнр-быдлокод смахивает, когда и рнр и html в одном файле навалены.
А вот layout в xml-файлах это уже православная шаблонизация
А вот layout в xml-файлах это уже православная шаблонизация
Re: Урок 16. Программное создание экрана. LayoutParams
Для общего развития. Ну и если понадобится динамически экран менять, оно пригодится.Flactor писал(а):У меня вопрос - такое создание экранов кто-то использует или это просто "для общего развития"?
Re: Урок 16. Программное создание экрана. LayoutParams
Вопрос. У меня есть 2 лайаута main и explorer, притом explorer - и для layout-land. Мне бы хотелось программно переключится на этот лэйаут и как в примере, программно туда что-то допиливать, но я не знаю как получить экзепляр класса LinerLayout по его ID... Другими словами, я ищу что-то типа findLayoutById(R.layout.explorer);
Re: Урок 16. Программное создание экрана. LayoutParams
Вопрос не актуален, то что я хотел сделать, делается через новые Activity, о чем я уже прочитал в следующих уроках.
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 16. Программное создание экрана. LayoutParams
Здравствуйте,
Может ли кто-нибудь уделить время, просмотреть текст и сказать правильно ли я пониманию иерархию классов и их функционал. Спасибо.
java.lang.Object
↳ android.view.View
View - строительная площадка для компонентов UI.
View занимает прямоугольное пространство экрана и отвечает за отображение компонентов (включая окно
экрана) и генерацию событий (event handling).
View базовый класс для виджетов, используемых для создания интерактивных UI компонентов (кнопки,
текстовые поля и т.д.)
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
ViewGroup - основной класс для разметки (layouts) компонентов и содержащих их контейнеров (view).
Включает подклассы LinearLayout, TableLayout, RelativeLayout и т.д.
java.lang.Object
↳ android.view.ViewGroup.LayoutParams
LayoutParams регулирует разметку (layout parameters) посредством атрибутов высоты (height) и ширины
(width)
java.lang.Object
↳ android.view.ViewGroup.LayoutParams
↳ android.view.ViewGroup.MarginLayoutParams
Подкласс,поддерживаюший установку отступов (margins) компонента (view).
Наследует два атрибута LayoutParams и имеет свои четыре: bottomMargin, leftMargin, rightMargin, topMargin.
Может ли кто-нибудь уделить время, просмотреть текст и сказать правильно ли я пониманию иерархию классов и их функционал. Спасибо.
java.lang.Object
↳ android.view.View
View - строительная площадка для компонентов UI.
View занимает прямоугольное пространство экрана и отвечает за отображение компонентов (включая окно
экрана) и генерацию событий (event handling).
View базовый класс для виджетов, используемых для создания интерактивных UI компонентов (кнопки,
текстовые поля и т.д.)
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
ViewGroup - основной класс для разметки (layouts) компонентов и содержащих их контейнеров (view).
Включает подклассы LinearLayout, TableLayout, RelativeLayout и т.д.
java.lang.Object
↳ android.view.ViewGroup.LayoutParams
LayoutParams регулирует разметку (layout parameters) посредством атрибутов высоты (height) и ширины
(width)
java.lang.Object
↳ android.view.ViewGroup.LayoutParams
↳ android.view.ViewGroup.MarginLayoutParams
Подкласс,поддерживаюший установку отступов (margins) компонента (view).
Наследует два атрибута LayoutParams и имеет свои четыре: bottomMargin, leftMargin, rightMargin, topMargin.
Re: Урок 16. Программное создание экрана. LayoutParams
Я в теории не сильно силён, но скажу что вроде как всё правильно мыслите. Немножко не соглашусь только с этим:
View не обязательно может быть прямоуголным, и он не генерирует события (вот тута хз как правильно сказать, но наоборот к обработчику привязывается view);View занимает прямоугольное пространство экрана и отвечает за отображение компонентов (включая окно
экрана) и генерацию событий (event handling).
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 16. Программное создание экрана. LayoutParams
dil_android
event handling - правильно переводится как обработка событий, в остальном все верно.
rezak90
occupies a rectangular area переводится как "занимает прямоугольную область"
event handling - правильно переводится как обработка событий, в остальном все верно.
rezak90
occupies a rectangular area переводится как "занимает прямоугольную область"
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 16. Программное создание экрана. LayoutParams
опередили меня AndreyI
действительно, отвечает за обработку событий, а прямоугольный это экран или круглый не имеет никакого значения. В моем понимании - это просто холст, на который можно выкладывать компоненты, в том числе окно (window) экрана, которое тоже является компонентой.
Остальное по моему правильно.
действительно, отвечает за обработку событий, а прямоугольный это экран или круглый не имеет никакого значения. В моем понимании - это просто холст, на который можно выкладывать компоненты, в том числе окно (window) экрана, которое тоже является компонентой.
Остальное по моему правильно.
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 16. Программное создание экрана. LayoutParams
Как вы оба полагаете?