Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.03.2014, 18:42
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 1  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
По умолчанию Позиционирование элементов в скинованном ActionBar (flex mobile)

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

А нужно чтобы он выглядел вот так:

То есть проблема в позиционировании компонента «крестик с циферкой» который сделан во флеше и просто заэддчайлден в классе UIComponent
Как все сделано сейчас
Скин присвоен в css:
Код:
s|ActionBar
{
	chromeColor: #d9e0e7;
	titleAlign: center;
	skinClass: ClassReference("theme.ActionBarSkin");
	paddingBottom: 0;
	paddingLeft: 10;
	paddingRight: 0;
	paddingTop: 2;
}
Класс скина я просто скопировал из мобильной темы, и внес в него все необходимые мне изменения.
В классе Main содержимое ActionBar вставляется так:
Код AS3:
<s:navigationContent>
				<s:Image smooth="true" left="15" top="2"         source="@Embed('../assets/actionBar/header.png')"/>
</s:navigationContent>
 
<s:actionContent>
				<s:Image id="menuBack" smooth="true" width="100%" height="100%" source="@Embed('../assets/actionBar/menuBtn.png')" click="navigator.popToFirstView();"/>
</s:actionContent>
То есть картинка-лейбл слева вставляется в navigationContent, синяя кнопка возврата в меню в actionContent. Компонент я решил вставить в titleContent, соотвественно во view, где он появляется, я вписываю следующее:
Код AS3:
<s:titleContent>
		<as3comps:SmallSelectedIcon   width="100%" height="100%" click="navigator.pushView(views.Selected)"  />
</s:titleContent>
<s:actionContent>
		<s:Image id="menuBack" name="menuBack" smooth="true" width="100%"  height="100%" source="@Embed('../assets/actionBar/menuBtn.png')" click="navigator.popToFirstView();"/>
</s:actionContent>
Ну и теперь самое главное, я думал что теперь мне достаточно в классе скина изменить лейаут titleGroup примерно так (строчка с комментарием):
Код AS3:
titleGroup = new Group();
        hLayout = new HorizontalLayout();
        hLayout.horizontalAlign = HorizontalAlign.RIGHT; //  было LEFT
        hLayout.verticalAlign = VerticalAlign.MIDDLE;
        hLayout.gap = 0;
        hLayout.paddingLeft = hLayout.paddingRight = layoutTitleGroupHorizontalPadding; 
        hLayout.paddingTop = hLayout.paddingBottom = 0;
        titleGroup.layout = hLayout;
        titleGroup.id = "titleGroup";
однако обнаружил что изменения вносимые в лейаут в скине, ни напрямую в код, ни через css, никак не проявляются, компонент остается на своем месте. Все остальные способы поменять его место (впихнуть в actionGroup и т.д.) оказались глючными или нерабочими. В общем на этом примере я остро ощутил свое непонимание принципов позиционирования компонентов во Flex, очень надеюсь что кто нибудь прояснит хотя бы в каком направлении копать.
Изображения
   

Старый 27.03.2014, 16:35
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
1. Уберите вот это: "и внес в него все необходимые мне изменения."
2. Откройте документацию.
3. Обратите внимание на свойства actionLayout и navigationLayout.
4. Прочитайте наконец то что написано по ссылкам в разделах "Дополнительные примеры" и "Дополнительно" в документации на этот компонент (они находятся вверху страницы, сразу после раздела "Синтаксис MXML").
5. Если все еще будет непонятно, где вы ошиблись, напишите об этом, попробую объяснить вам своими словами.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 28.03.2014, 10:38
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 3  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
Спасибо! В принципе этот вопрос я уже решил, в классе скина я выцепляю этот компонент по getChildByName, отрубаю лейаут и позиционирую его сам, но есть сильное ощущение что этот подход очень кривой и может еще вылезти боком, поэтому спасибо за наводку, сейчас приходится другим проектом заниматься, но на той неделе я попробую сделать все правильно и отпишу о результатах.

Старый 30.03.2014, 17:03
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Это не решение. В принципе.
Для позиционирования дочерних элементов в ActionBar вам нет необходимости модифицировать его скин (если речь не идет о изменении позиционирования navigationGroup, titleGroup или actionGroup, что не является вашим случаем). О существовании getChildByName в контексте spark компонентов, можете вообще забыть, как и о существовании свойства name.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 01.04.2014, 13:26
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 5  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
В общем появилось время на эксперименты, перечитал еще раз документацию, сделал все так как там написано, поместил нужные мне компоненты таким вот образом:
Код AS3:
<s:actionContent>
		<s:Button icon="{ new SmallSelectedIcon() }" click="navigator.pushView(views.Selected);"/>
		<s:Button icon="@Embed('../assets/actionBar/menuBtn.png')" click="navigator.popToFirstView();"/>
</s:actionContent>
где new SmallSelectedIcon() это как раз тот самый компонент "плюсик с цифрой" о котором шла речь. Как изменять его состояние я думаю разберусь (сделаю bindable), вопрос теперь заключается в другом. ActionBar теперь выглядит вот так:

и непонятно как растянуть icon (а точнее Button, я так понимаю иконка во всю кнопку и так растянута) в высоту всего ActionBar? Присвоение height="100%" ничего не меняет. Ничего на эту тему я в документации не нашел
Изображения
 


Последний раз редактировалось PainKiller; 01.04.2014 в 13:59.
Старый 01.04.2014, 15:54
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 6  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Вот в этом случае можете сделать свой скин для Button. Хотя по уму у вас должна быть иконка соответствующего размера. Вот вам еще дополнительное чтиво.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 01.04.2014, 16:56
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 7  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
Понял, спасибо большое. С иконками разного DPI все равно ничего не получается, они просто делают кнопку более крупной, а пустая окантовка по краям все равно остается. В общем буду делать скин кнопки.

Добавлено через 1 час 38 минут
И еще один вопрос по скинованию кнопки с компонентом. В общем я сделал так:
Код AS3:
[Bindable]
public static var selIcon:SmallSelectedIcon = new SmallSelectedIcon();
 
<s:actionContent>
		<s:Button icon="{ selIcon }" skinClass="theme.ActionBtnSkinComp" click="navigator.pushView(views.Selected);"/>
	</s:actionContent>
и все нормально, обновляю как мне надо компонент, все ок. Проблема со скином, вот его класс (ActionBtnSkinComp):
Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009"
		xmlns:s="library://ns.adobe.com/flex/spark">
	<!-- host component -->
	<fx:Metadata>
		[HostComponent("spark.components.Button")]
	</fx:Metadata>
 
	<!-- states -->
	<s:states>
		<s:State name="disabled" />
		<s:State name="down" />
		<s:State name="over" />
		<s:State name="up" />
	</s:states> 
 
	<s:BitmapImage id="iconDisplay"  left="0" right="0" top="0" bottom="0" />
 
 
	<!-- SkinParts
	name=iconDisplay, type=spark.primitives.BitmapImage, required=false
	name=labelDisplay, type=spark.core.IDisplayText, required=false
	-->
</s:SparkSkin>
когда я присваиваю его кнопке она исчезает.

Добавлено через 1 час 57 минут
В принципе я это тоже исправил скопировав из мобильной темы класс ButtonSkin.as, и внеся в него необходимые мне изменения, затем присвоил его моей кнопке. Но если есть подходы получше, просьба ими поделиться))


Последний раз редактировалось PainKiller; 01.04.2014 в 18:36.
Создать новую тему Ответ Часовой пояс GMT +4, время: 22:58.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 22:58.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.