Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 20 окт 2018, 11:26

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 73 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
СообщениеДобавлено: 15 сен 2011, 03:00 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
В этом уроке мы:

- рисуем экран программно, а не через layout-файл

Click here to read this article!

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Последний раз редактировалось damager82 28 апр 2017, 10:52, всего редактировалось 6 раз(а).

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 янв 2012, 15:38 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
Цитата:
А если мы хотим отступ не в пикселах?

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 11 янв 2012, 10:24 
Аватар пользователя

Зарегистрирован: 09 янв 2012, 14:45
Сообщений: 2386
Откуда: Самара
Благодарил (а): 102 раз.
Поблагодарили: 321 раз.
Тут назрело парочка вопросов, если можно:
1.
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout.LayoutParams;
Я так понимаю LinearLayout это подкласс ViewGroup. Но почему тогда они в разных пакетах?

2. У вас в коде сначала отображается LinearLayout я так понимаю?
Цитата:
setContentView(linLayout, linLayoutParam);

А после идет добавление элементов. Наверное все же было лучше сначала добавить элементы, а потом уже отобразить панель? Просто помню при изучении Swing это был немаловажный фактор, ибо можно было наблюдать как форма наполняется элементами. Тут наверное тоже самое, когда элементов немало. Хотя может быть ошибаюсь.

_________________
Изображение

А тот ли ты путь выбрал, разработчик?
Хочешь знать ошибки ответ? Загляни в logcat!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 11 янв 2012, 10:48 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
1) По поводу пакетов - это надо разрабов Android спрашивать, почему они так раскидали классы.

В android.widget сложены визуальные компоненты. А android.view содержит классы, на которых работают эти компоненты.

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

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 01 фев 2012, 14:41 
Аватар пользователя

Зарегистрирован: 31 янв 2012, 18:00
Сообщений: 4
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
damager82 писал(а):
Цитата:
А если мы хотим отступ не в пикселах?


Поправьте меня, если я не прав, но в общей сложности можно DIP умножить на коэффициент плотности экрана.

Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. int px = (int) (dip * getResources().getDisplayMetrics().density);


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 11 мар 2012, 06:48 

Зарегистрирован: 27 фев 2012, 10:53
Сообщений: 17
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Я бы добавил в этом уроке что такой подход является не желательным, т.к. используя ресурсы с разметкой, для разработки ГУИ, мы отделяем уровень представления от самого кода (или бизнес-логики). Что в итоге позволяет нам изменять внешний вид не затрагивая кода, можно применять оптимизированные файлы разметки под различные устройства, а не описывать все это вручную в коде. В общем плюсов у этого подхода перед описанным в уроке много.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 20 май 2012, 14:00 

Зарегистрирован: 07 май 2012, 00:32
Сообщений: 22
Благодарил (а): 0 раз.
Поблагодарили: 5 раз.
У меня возник вопрос. Перечитывал урок и документацию несколько раз, и все равно есть недопонимание:

" Известные нам примеры 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. Объясните пожалуйста, в чем я ошибся?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 20 май 2012, 20:17 
Аватар пользователя

Зарегистрирован: 17 фев 2012, 21:23
Сообщений: 1339
Откуда: Мордор
Благодарил (а): 16 раз.
Поблагодарили: 161 раз.
:shock: Вы ошиблись уже в пункте 1. ViewGroup != LinearLayout. Прировнять эти два класса все равно, что сказать я свой отец, а этим может похвастаться только Чак Норис)

PS: У класса LinearLayout.LayoutParams нет подкласса MarginLayoutParams

Еще:
Цитата:
Áàçîâûì äëÿ ýòèõ LayoutParams ÿâëÿåòñÿ ViewGroup.LayoutParams.
LinearLayout.LayoutParams происходит от ViewGroup.MarginLayoutParams а не от ViewGroup.LayoutParams. Следовательно, пункт 3 тоже не правда.

_________________
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 20 май 2012, 22:30 

Зарегистрирован: 07 май 2012, 00:32
Сообщений: 22
Благодарил (а): 0 раз.
Поблагодарили: 5 раз.
KamiSempai, вы опровергли то, что я написал. Тогда, пожалуйста, объясните как правильно?

" Известные нам примеры ViewGroup – это LinearLayout, TableLayout, RelativeLayout и т.д."

и

"Вы ошиблись уже в пункте 1. ViewGroup != LinearLayout."

уже идут в разрез.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 20 май 2012, 23:34 

Зарегистрирован: 07 май 2012, 00:32
Сообщений: 22
Благодарил (а): 0 раз.
Поблагодарили: 5 раз.
В общем, покопался я в документации, и разобрался со всеми вопросами. Попутно, в поисках LinearLayout.LayoutParams составил небольшую схему иерархии классов. Может кому и понадобится.


Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 26 май 2012, 16:34 
Аватар пользователя

Зарегистрирован: 13 янв 2012, 17:56
Сообщений: 219
Благодарил (а): 3 раз.
Поблагодарили: 6 раз.
icamys, KamiSempai имел ввиду, что один является потомком другого, но это не значит что они равны.
Большое спасибо за наглядную диаграмму


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 04 июн 2012, 21:59 
Аватар пользователя

Зарегистрирован: 28 май 2012, 16:22
Сообщений: 5
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
У меня вопрос - такое создание экранов кто-то использует или это просто "для общего развития"? Потому как это на рнр-быдлокод смахивает, когда и рнр и html в одном файле навалены.
А вот layout в xml-файлах это уже православная шаблонизация


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 июн 2012, 09:12 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
Flactor писал(а):
У меня вопрос - такое создание экранов кто-то использует или это просто "для общего развития"?

Для общего развития. Ну и если понадобится динамически экран менять, оно пригодится.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 22 июн 2012, 12:30 

Зарегистрирован: 21 июн 2012, 15:34
Сообщений: 5
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Вопрос. У меня есть 2 лайаута main и explorer, притом explorer - и для layout-land. Мне бы хотелось программно переключится на этот лэйаут и как в примере, программно туда что-то допиливать, но я не знаю как получить экзепляр класса LinerLayout по его ID... Другими словами, я ищу что-то типа findLayoutById(R.layout.explorer);


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 23 июн 2012, 18:53 

Зарегистрирован: 21 июн 2012, 15:34
Сообщений: 5
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Вопрос не актуален, то что я хотел сделать, делается через новые Activity, о чем я уже прочитал в следующих уроках.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 сен 2012, 17:06 

Зарегистрирован: 10 сен 2012, 11:58
Сообщений: 103
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Здравствуйте,

Может ли кто-нибудь уделить время, просмотреть текст и сказать правильно ли я пониманию иерархию классов и их функционал. Спасибо.

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.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 сен 2012, 17:26 
Аватар пользователя

Зарегистрирован: 26 июн 2012, 13:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
Я в теории не сильно силён, но скажу что вроде как всё правильно мыслите. Немножко не соглашусь только с этим:
Цитата:
View занимает прямоугольное пространство экрана и отвечает за отображение компонентов (включая окно
экрана) и генерацию событий (event handling).

View не обязательно может быть прямоуголным, и он не генерирует события (вот тута хз как правильно сказать, но наоборот к обработчику привязывается view);

_________________
R.id.team
Политика на форуме запрещена


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 сен 2012, 18:25 

Зарегистрирован: 14 май 2012, 16:18
Сообщений: 372
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
dil_android
event handling - правильно переводится как обработка событий, в остальном все верно.
rezak90
occupies a rectangular area переводится как "занимает прямоугольную область"


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 сен 2012, 18:34 

Зарегистрирован: 10 сен 2012, 11:58
Сообщений: 103
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
опередили меня AndreyI
действительно, отвечает за обработку событий, а прямоугольный это экран или круглый не имеет никакого значения. В моем понимании - это просто холст, на который можно выкладывать компоненты, в том числе окно (window) экрана, которое тоже является компонентой.
Остальное по моему правильно.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 сен 2012, 18:36 

Зарегистрирован: 10 сен 2012, 11:58
Сообщений: 103
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Как вы оба полагаете?


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 73 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB