2012-11-16 198 views
0

这适用于AIR 3.1上的Flex 4.6。我在AIR 3.5中也遇到了同样的问题。Flex 4.6 Mobile - TextArea和TextInput皮肤问题

在我目前正在对我有问题与textinputs和文字区域停留视图之间的屏幕上的文本应用程序,同时滚动等

我看到建议的修正是使用了不同的skinClass的TextInput的和文本区域的这样:

skinClass="spark.skins.spark.TextAreaSkin" 

Adobe Flex Mobile - TextArea refuses to scroll on Android, StageWebView won't scroll at all是这些建议使用TextAreaSkin中的一个例子。

但是,我现在有一些相当重大的问题,当使用此和等效的TextInputSkins。

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

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

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

我已经在我们的其他应用程序中测试过这个,并且在那个应用程序中遇到同样的问题。 (我唯一需要为该应用使用皮肤的情况是不可编辑的textareas - 我从未看到我在该应用中提到的第一个问题)。

编辑:我创建了一个相当基本的演示与几个视图,我已经转载了大部分我遇到的问题。这是一款使用分视浏览器的移动应用程序。 主应用程序文件:

<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> 

TestView:

<?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> 

TestView2:

<?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主文本区域应用了的skinClass这对我来说有以下问题:

的iOS(iPad2的):无softKeyboard可言。

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

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

+0

分享一些代码来复制问题。您可能还需要指定确切的设备;和他们安装的操作系统加上你的Flex版本(4.6我假设从标签)和你使用的AIR版本。 – JeffryHouser

+0

@ www.Flextras.com我已经在标签和标题中加入了flex版本,但我现在也将它添加到了帖子中。另外,我现在添加了操作系统版本的设备。但是,我在各个平台上发现重大问题的事实表明,这不是一个操作系统问题。我已经包含了一个快速代码示例,但除非我提供了整个应用程序= - /,否则我可以提供的内容并不多。 – Rjs37

+0

我应该说“Runnable”代码来复制这个问题。我可以剪切和粘贴的东西和编译。解决问题的最小可行样本。我没有遇到你提到的任何问题;我已经在iOS和Android的多个版本中使用了TextInputs。您可以考虑将您的AIR版本更新为最新版本,并查看是否可以解决问题。 – JeffryHouser

回答

2

好吧,我发现我的问题是什么。最终发现它非常简单。

我使用了错误的皮肤。有一个叫移动特定的皮肤:

spark.skins.mobile.TextInputSkin 

它不是完美的工作,但是我已经事实上实际上得到的东西的工作是一种解脱笑。

+0

不是一个真正的解决方案,但是,是吗? mobile.TextInputSkin引入了Flex 4.6和AIR 3.5中的很多其他问题,例如省略了输入的第一个字符。 – AlBirdie

+2

@Al_Birdy这是我注意到的唯一问题,而且似乎只有当您使用提示时。没有提示,我从切换到该皮肤以来一直没有任何问题。我以前的其他选择是完全不可行的。 – Rjs37

+1

我想我也遇到过这个问题。在iOS中,当我将一个字符输入到TextInput中时,第一个字符被选中(由iOS),然后在我输入更多字符时被覆盖。这是你们发现的吗?有解决方案吗? –

0

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

https://github.com/lizardon/TouchScrollStageText

其工作原理是在更改StyleableStageText类侦听触摸事件和位置改变到祖先滚轮组件。

希望Apache很快就能解决这个问题,并且不需要解决方法。

1

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

另一件事是:我们绝对不应该在TextInput和TextArea上使用限制属性或其他方式,否则我们会得到文本互相覆盖的错误。 希望这个帮助,Rjs37