0

我们知道我们可以在 .mxml 中定义状态。问题是,我们的应用程序或组件在任何时候都可能只处于其中一种状态。

在为 Flex Mobile 编程时,横向和纵向(方向)通常需要成为状态,以便轻松定义控件/组件/元素是 [不] 可见、(禁用/启用)还是使用某些颜色着色。但是我们的应用程序或组件也有其他的状态,独立于屏幕方向,例如 SufficientCredit 和 InsufficientCredit。

假设我们只想在状态为 SufficientCredit 时显示提交按钮。但是,当您更改手机的方向时,您还需要显示/隐藏/着色其他控件。在现实生活中,您的信用状态确实是 SufficientCredit,但您的应用现在处于 Portrait 或 Landscape 状态。现在我们的提交按钮将消失,尽管它不在 InsufficientCredit 状态。

我不想创建像 LandscapeSufficientCredit、LandscapeInsufficientCredit、PortraitSufficientCredit 和 PortraitInsufficientCredit 这样的“组合”状态。我也不想完全放弃状态并编写一个巨大的 if-else 语句,其中每个分支都必须包含修改组件属性(颜色、大小、可见性等)的代码,然后记得从很多地方调用它那会改变状态。

我听说过状态组,但它们的文档确实令人困惑,我不确定它们是否会在这种情况下有所帮助。

4

2 回答 2

0

StateGroups 是您的答案。您可以执行以下操作:

<s:State name="portrait" group="portraitStates"/>
<s:State name="landscape" group="landscapeStates"/>
<s:State name="portraitState1" group="portraitStates, state1States"/>
<s:State name="landscapeState1" group="landscapeStates, state1States"/>
<s:State name="portraitState2" group="portraitStates, state2States"/>
<s:State name="landscapeState2" group="landscapeStates, state2States"/>

然后在您的视图中覆盖 getCurrentState() 方法以确定您的状态。如

override public function getCurrentViewState():String
{
    var aspect:String = FlexGlobals.topLevelApplication.aspectRatio; //gets landscape/portrait
    //some logic to determine current state
    return aspect+currentState;
} 

我这样做是为了让手机/平板电脑的横向/纵向+多个状态都在一个视图中。

于 2012-12-28T19:42:24.463 回答
0

我想如果你同时想要两个状态,那么这些状态会影响独立的参数(我猜屏幕方向和颜色是独立的)。

在这种情况下,您可能需要制作一些子组件来监视特定父级的状态并在内部处理它们。

在这种情况下,您也可以使用继承的样式来实现它——您在父组件中调用 setStyle("Credit","Insufficient") ,所有知道这些样式的子组件都会相应地更改它们的表示。

于 2012-12-04T13:39:51.417 回答