1

テキストフィールド(LabelField、EditFieldなど)に絵文字/スマイリー/任意のビットマップを挿入する方法を探しています。私がこれまでに調査したことから、これを行う直接的な方法はないので、私はこの振る舞いをシミュレートしようとすることに固執しています。

私は、スマイリーの代わりに通常のテキストフィールドを使用して空白スペースを挿入し、スマイリーがあるべきテキストフィールドの上にいくつかのBitmapFieldsを配置することを考えていました。問題は、画面(x、y)上のキャラクターの位置を見つけるための信頼できる/迅速な方法がないことです。

アイデアをいただけますか?

この問題に対する他のアプローチを考えられますか?

多くの人がこの種の問題に一度か別の時に遭遇したと確信しています。なんとか解決策を見つけた人がいるといいのですが。どんなにクレイジー/複雑/難しいものであっても、私はどんな解決策も受け入れるのに十分必死です。

また、これをSDK 5.0以降で使用したいのですが、6.0のみで解決します。

4

1 に答える 1

3

あなたができるかもしれないことは、EditFieldsとBitmapFieldsのコンテナであるカスタムマネージャを作成することです。ユーザーがマネージャー内にある最初のEditFieldをクリックして入力を開始したら、絵文字が必要になるまで入力させます。彼らがそれを選択したら、EditFieldの直後にBitmapFieldを作成し、BitmapFieldの右側に新しいEditFieldを配置します。ユーザーがバックスペースを押してEditFieldを空にしたとき、それを削除する必要があります。その後、ユーザーはBitmapFieldを選択し、後続のバックスペースはBitmapFieldを削除して、前のEditFieldにフォーカスを置きます。

サイズを制御できる独自のEditFieldと、バックスペースで削除できるBitmapFieldも作成する必要があります。

私が先に考える限り、これを5.0で使用しても問題はないはずです。

コメント用に編集:

あなたはあなたが取るどんなアプローチでもあなたのマネージャーのあなた自身のsublayout()を実装しなければならないでしょう、それであなたは彼らをそこに置いた人なのであなたはポジションを知っています。複数行を実行したい場合(私のアプローチは単一行でした)、次の3つのいずれかを実行できます。

1.)各行に新しいEditFieldを用意し、バックスペースが前のフィールド(この場合は最後の行)にドロップする場所について説明したのと同じ方法でリンクを実行します。フィールドがテキストに基づいている大きさの測定値を保持し、それが次の行に移動するかどうかを確認する必要があります。EditFieldsが配置されている場所を調整するだけの場合。

2.)高さを拡張する独自のEditFieldを実装することにより、複数行フィールドに画像を配置できます。この場合、テキストがどこにあり、どの行にあるかがわかります。ビットマップの描画は、(あなたがどの行番号であるか)*(フォントの高さ)とgetAdvance(text_up_to_bitmap)を計算することです。

3.)すべての描画を手動で行うフォーカス可能なマネージャーがある独自のEditFieldを実装します。キーストロークのキャプチャから保存した文字列を解析し、絵文字があるべき場所にフラグを付けることができます。その前にテキストを描画し、絵文字を描画してから、テキストの描画を続行します。これの難しさは、カーソルがどこにあるべきかを決定すること、仮想キーボードを立ち上げること、そしてEditFieldがあなたのために行う他のいくつかのタスクを処理することのようなことをしなければならないことです。

于 2011-05-30T12:56:12.780 に答える