1

テキストが追加されると、SparkTextAreaコンポーネントを自動的に下にスクロールさせようとしています。

TextAreaが最初に入力されるとき、垂直スクロールバーは下部にあります。しかし、さらにテキストを追加すると、スクロールを完全に拒否します。iOSプラットフォームでは動作しますが、Androidでは動作しません!!

ここにある例に従って、次のことを試してみました:http: //devgirl.org/2010/12/16/automatically-scroll-flex-mobile-textarea/

StyleableTextField(TextArea1.textDisplay).htmlText += textHTML;
StyleableTextField(TextArea1.textDisplay).scrollV++;

また、次の2行のコードを試しました。

StyleableTextField(TextArea1.textDisplay).verticalScrollPosition = int.MAX_VALUE - 1;
TextArea1.scrollToRange(int.MAX_VALUE, int.MAX_VALUE);

何も機能しません!TextAreaが更新されるたびに、一番上までスクロールして戻るか、まったく移動しません。

代わりに、HTMLコンテンツがStageWebViewに表示されるようにプログラムを変更してみました。しかし、iPadでも、それをスクロールさせることはできません。JavaScript関数(document.getElementById('id')。focus())を呼び出し、コードに非表示のアンカータグを挿入して、loadURL()を呼び出してみました。どちらの解決策も機能しませんでした。

誰かがこれを手伝ってくれませんか?私は絶対に困惑しています。

4

2 に答える 2

0

デフォルトのテキストフィールドを使用できますが、テキスト入力がフォーカスされているときにそのテキストフィールドへの自動スクロールなどのすべてを処理する必要があることに注意してください (したがって、テキスト入力をキーボードの領域に近づけすぎると、キーボードでカバーされます)、SoftKeyboardType の可能性があります。正しく表示されない (数字キーボードのように)... 私の観点からは、ステージ テキストはテキスト入力に最適なオプションです。

これは、StageText のテキスト入力が期待どおりに機能するようにするための私の回避策です。

  1. StyleableStageText の内容をコピーし、ExtendedStyleableStageText のような新しいファイルを作成します

  2. ExtendedStyleableStageText に 2 つの関数を追加します。

    public function freezeStageText(){ if(stageText){ if(stageText.visible){ createProxyImage(); } stageText.visible = false; stageText.stage = null; } }

    public function unFreezeStageText():void{ if(stageText){ if(!stageText.visible){ disposeProxyImage(); } stageText.visible = true; stageText.stage = ステージ; }
    }

  3. spark.skins.mobile.supportClasses.StageTextSkinBase の内容を ExtendedStageTextSkinBase のような新しいファイルにコピーします。

  4. ExtendedStageTextSkinBase で、textDisplay を ExtendedStyleableStageText に変更します。
  5. spark.skins.mobile.StageTextInputSkin のコンテンツをコピーして、独自の textinput スキン ファイルを作成します。スキンでは、スキン クラスが新しく作成された ExtendedStageTextSkinBase ファイルを拡張し、関数を追加する必要があります。

        protected function commitCurrentState():void{
          super.commitCurrentState();
          if(currentState == 'disabled'){
             textDisplay.freezeStageText();
          }else{
             textDisplay.unFreezeStageText();
          }
        }
    
  6. textinput を使用する必要があるビューで、ビューの上にポップアップを表示する必要がある場合は、すべての textinput を false に変更するか、スクロール時にテキストを正しく配置する必要がある場合は、次のことができます。 TouchInteractionStart と TouchInteractionEnd をスクローラーに追加し、イベントをリッスンします。ユーザーがスクロールを開始してスクローラーをスクロールすると、ビューに表示されているすべてのテキスト入力が無効になり、ユーザーがタッチを停止すると、すべてのテキスト入力が再度有効になります。

お役に立てれば。

于 2013-12-23T22:50:57.167 に答える
0

StageText スキンを使用している場合、TextArea と TextInput はスクロールをサポートしません。スクロールを機能させるには、「TextAreaSkin」を使用するように TextArea を設定する必要があります。
TextArea と TextInput は、StageText スキンを使用している間、ソフトキーボードのスクロール/パンをサポートしていません。

この理由は、TextArea が StageText スキンを使用している場合、AIR は実際には OS ネイティブのテキスト ボックスを使用し、それを displayList の上に配置しているためです。これが、StageText スキンを使用するテキスト ボックスが常に他のすべての表示オブジェクトの上に表示される理由です。
これは、アプリにネイティブの表示オブジェクトを持たせることができ、OS が提供するすべてのサービス (自動修正、Android のソフト キーボードの「次へ」/「完了」ボタンなど) にアクセスできるため、良いことですが、それらを使用できない多くの状況。

そのため、TextAreaSkin に戻る必要があります。これは、デバイス ネイティブのソフトキーボードをもう取得できないために悪臭を放つか、スクロールする必要があることを回避する方法を見つけることです。

StageWebView についてはわかりませんが、同じ問題があると思われます (displayList の上に配置されたネイティブ コンポーネント)。

于 2012-08-02T10:54:32.073 に答える