0

这适用于 AIR 3.1 上的 Flex 4.6。我在 AIR 3.5 中也遇到了同样的问题。

在我目前正在开发的应用程序中,我遇到了来自 textinputs 和 textareas 的文本在视图之间停留在屏幕上的问题,同时滚动等。

我看到的修复建议是为 textinput 和 textarea 使用不同的皮肤类:

skinClass="spark.skins.spark.TextAreaSkin"

Adobe Flex Mobile - TextArea 拒绝在 Android 上滚动,StageWebView 根本不会滚动是使用 TextAreaSkin 的这些建议之一的示例。

但是,在使用它和等效的 TextInputSkins 时,我现在遇到了一些相当大的问题。

在 iPad 2 (iOS6) 上,我们使用的软键盘根本不会出现,而在我们的三星 Galaxy 平板电脑 (Android 4) 上,键盘将只允许输入数字和某些特殊字符(如果我按住它也允许输入大写字母在特定的字母上,但在正常输入时不会)。

我在这里发现了另一个与我类似的问题: http ://forums.adobe.com/message/4078890但它没有解决方案。

奇怪的是,在我的 Android (Desire) 手机上一切正常,或者如果我在三星 Galaxy 平板电脑上使用不同的键盘应用程序 (Swiftkey),那么它也可以正常工作。

我已经在我们的另一个应用程序中对此进行了测试,并且在该应用程序中遇到了相同的问题。(我必须为该应用程序使用皮肤的唯一情况是不可编辑的文本区域 - 我从未见过我在该应用程序中提到的第一个问题)。

编辑:我创建了一个相当基本的演示,其中包含一些视图,其中我复制了我遇到的大部分问题。这是一个使用拆分视图导航器的移动应用程序。主要申请文件:

<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>

<!-- Split View Navigator used for Tablet for panelled functionality -->
<s:SplitViewNavigator width="100%" height="100%">
    <s:layout.landscape>
        <s:HorizontalLayout />
    </s:layout.landscape>
    <s:layout.portrait>
        <s:VerticalLayout />
    </s:layout.portrait>
    <s:ViewNavigator width.landscape="35%" height.landscape="100%"
                     width.portrait="100%" height.portrait="30%" 
                     firstView="views.TestView" />
    <s:ViewNavigator width="100%" height="100%" height.portrait="100%"
                     firstView="views.TestFormHomeView" />
</s:SplitViewNavigator>
</s:Application>

主页视图:

<fx:Script>
    <![CDATA[
        protected function buttonClick():void
        {
            navigator.pushView(TestView2);
        }

        protected function listClick():void
        {
            navigator.popView();
            navigator.pushView(TestFormHomeView);
        }
    ]]>
</fx:Script>

<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:Scroller width="100%" height="100%">
    <s:HGroup width="100%">
        <s:List width="50%" click="listClick()">
            <s:ArrayCollection>
                <fx:String>Test1</fx:String>
                <fx:String>Test2</fx:String>
                <fx:String>Test3</fx:String>
                <fx:String>Test4</fx:String>
                <fx:String>Test5</fx:String>
            </s:ArrayCollection>
        </s:List>
        <s:VGroup width="50%">
            <s:TextArea id="testing" skinClass="spark.skins.spark.TextAreaSkin" />
            <s:TextArea id="testing2" />
            <s:Button click="buttonClick()" label="Next Screen" />
        </s:VGroup>
    </s:HGroup>
</s:Scroller>
</s:View>

测试视图:

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" title="TestView">
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>

<s:TextArea id="testing2" />
</s:View>

测试视图2:

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" title="TestView2">
<fx:Script>
    <![CDATA[
        protected function goBack():void
        {
            navigator.popView();                
        }
    ]]>
</fx:Script>
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:layout>
    <s:VerticalLayout />
</s:layout>
<s:TextArea id="testing2" />
<s:Button label="Back" click="goBack()" />
</s:View>

HomeView 上的主要文本区域应用了皮肤类,这对我来说有以下问题:

iOS (iPad2):根本没有软键盘。

Android(Samsung Galaxy Tab):键盘出现但只允许数字和某些特殊字符

我无法重现问题(没有其他皮肤类),文本留在屏幕上,但在 Android 上,如果您在“TestView”上的文本框中键入内容并单击 Next Screen,TestView 中的文本将在视图已加载(直到您单击文本框)。如果你的屏幕足够长,如果你不使用其他皮肤类,那么滚动文本框会导致很多问题。

4

3 回答 3

2

好的,我发现了我的问题。最终证明是一个非常简单的。

我用错了皮肤。有一种手机专用皮肤叫做:

spark.skins.mobile.TextInputSkin

它还没有完美地工作,但事实上我有一些工作是一种解脱,哈哈。

于 2012-11-20T11:08:27.587 回答
1

当我们需要在移动设备中对 TextInput 和 TextArea 进行皮肤处理时,我们需要继承默认 spark.skins.mobile.MobileSkin(或 MobileTextInputSkin),因为与默认 MXML 皮肤相比,使用 Actionscript 的移动设备皮肤是轻量级皮肤。如果您使用 MXML 对 TextInput 和 TextArea 进行皮肤,在某些设备上,例如三星的手机和平板电脑(不使用默认的 Google Android 键盘),您会遇到输入焦点时不会出现 SoftKeyboard 的问题。

另一件事是:我们永远不应该在 TextInput 和 TextArea 上使用限制属性,否则,我们将得到文本相互覆盖的错误。希望这有帮助,Rjs37

于 2013-12-19T00:31:55.843 回答
0

我为 StageTextAreaSkin 和 StageTextInputSkin 创建了一个解决方法,可以在 Scroller 中使用这些皮肤。如果您想使用 TextInputSkin 的唯一原因是支持滚动,这应该会有所帮助。它在 GitHub 上可用:

https://github.com/lizardon/TouchScrollStageText

它通过更改 StyleableStageText 类来侦听触摸事件和对祖先 Scroller 组件的位置更改来工作。

希望 Apache 很快会解决这个错误,并且不需要解决方法。

于 2013-09-23T07:42:56.383 回答