0

これは、AIR 3.1 上の Flex 4.6 用です。AIR 3.5 でも同じ問題が発生しました。

私が現在取り組んでいるアプリでは、テキスト入力とテキストエリアからのテキストがビュー間で画面にとどまり、スクロール中などに問題がありました。

私が提案した修正は、textinput と textarea に別のスキンクラスを使用することでした。

skinClass="spark.skins.spark.TextAreaSkin"

Adobe Flex Mobile - TextArea は Android でスクロールを拒否します。StageWebView はまったくスクロールしません。これは、TextAreaSkin を使用するためのこれらの提案の 1 つの例です。

ただし、これと同等の TextInputSkins を使用すると、かなり大きな問題が発生します。

iPad 2 (iOS6) では、ソフトキーボードはまったく表示されず、Samsung Galaxy タブレット (Android 4) では、キーボードは数字と特定の特殊文字のみを入力できます (押したままにすると大文字も許可されます)。特定の文字に表示されますが、通常のタイプでは表示されません)。

ここで、私のものと同様の問題についての別の言及を見つけました: http://forums.adobe.com/message/4078890しかし、解決策はありませんでした。

奇妙なことに、私の Android (Desire) 携帯電話ではすべて正常に動作します。また、Samsung Galaxy Tablet で別のキーボード アプリ (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>

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 のメイン テキスト領域にはスキンクラスが適用されており、これには次の問題があります。

iOS (iPad2): ソフトキーボードがまったくありません。

Android (Samsung Galaxy Tab): キーボードが表示されますが、数字と特定の特殊文字しか使用できません

テキストが画面に表示されたままの問題を (他のスキンクラスなしで) 再現することはできませんでしたが、Android では、'TestView' のテキスト ボックスに何かを入力して [次の画面] をクリックすると、TestView のテキストが表示された後に消えます。ビューが読み込まれました (テキストボックスをクリックするまで)。また、画面が十分に長い場合、テキスト ボックスをスクロールすると、他のスキンクラスを使用しないと多くの問題が発生します。

4

3 に答える 3

2

さて、私の問題が何であるかがわかりました。最終的にはとてもシンプルなものになりました。

間違ったスキンを使用していました。と呼ばれるモバイル固有のスキンがあります。

spark.skins.mobile.TextInputSkin

まだ完全には機能していませんが、実際に何かが機能しているという事実は安心です笑。

于 2012-11-20T11:08:27.587 に答える
1

モバイルで TextInput と TextArea をスキンする必要がある場合、デフォルトの spark.skins.mobile.MobileSkin (または MobileTextInputSkin) をサブクラス化する必要があります。これは、Actionscript を使用するモバイル スキンは、デフォルトの MXML スキンと比較して軽量のスキンであるためです。MXML を使用して TextInput と TextArea をスキニングすると、Samsung の携帯電話やタブレット (デフォルトの Google Android キーボードを使用しない) などの一部のデバイスで、入力がフォーカスされたときに SoftKeyboard が表示されないという問題が発生します。

もう 1 つは、TextInput と TextArea でrestrictプロパティを使用しないでください。そうしないと、テキストが互いに上書きされ続けるというエラーが発生します。この助けを願っています、Rjs37

于 2013-12-19T00:31:55.843 に答える