Androidにリッチテキストエディタを実装するための良いオプションがあるかどうか疑問に思っています。HTMLやJavascriptを使用してWebページに埋め込まれたものではなく、Androidアプリケーションで使用できるリッチテキストエディタについて話していることに注意してください。
私の要件は次のとおりです。
- 基本的なフォーマット(色、フォント、ハイライト、太字、斜体、下線など)
- ハイパーリンク
- インライン画像
- 箇条書きと番号付きリスト
- インラインテーブル(セル内のコンテンツのみが編集可能であり、テーブル構造は編集できません)
ご覧のとおり、これはWindowsの一般的なRichEditコントロールと非常によく似ています。
これまでに行ったいくつかの取り組み(調査とプロトタイピング)は次のとおりです。
WebViewの使用
WebViewコントロールを使用してHTMLフラグメントを1つロードしてみました。コンテンツは編集可能になり、HTMLであるため、ほとんどの要件を満たすことができると思います。しかし、いくつかの問題があります。
- (致命的)テキストカレットはありません。ユーザーは、入力した文字がどこに挿入されるかわかりません。
- 画面上のソフトキーボードは、デフォルトでは表示されません。ユーザーがキーボードを表示するためにメニューボタンを長押ししなければならないというトリックがあります。しかし、これは非常に悪いユーザーエクスペリエンスだと思います。また、画面レイアウトが適切に再配置されておらず、テキスト挿入ポイントがキーボードで覆われている場合があります。
EditTextの使用
EditTextコントロールを使用してみました。ある程度のリッチテキスト編集(色、フォント、太字、斜体、下線、インライン画像、箇条書き)をサポートしているようです。しかし、次の要件をどのように実装できるかはまだわかりません。
- 箇条書き記号(ドット、円、ダッシュ、矢印、星など)の外観を制御します。
- 番号付きリスト(1.、2.、3。など)
- テーブル
ところで、私はそこにいくつかの* Spanクラスがあるのを見ましたが、それらが何か助けになるかどうかはわかりません...そしてhttp://developer.android.comはそれらについて多くの有用な情報を提供していません。
では、いったいどうすればAndroidにリッチテキストエディターを実装できますか?EditTextを拡張して、新しい機能を追加できますか?または、最初から何かを行う必要があります-ビューを拡張し、すべてを自分で実装しますか?後のオプション(ビューの拡張)については、ユーザー入力でキャレットを移動することは言うまでもなく、実際にはテキストキャレットを表示して点滅させる方法さえわかりません。
私は今必死です...何かヒントはありますか?
ありがとう!
-トニー
(編集)
さらに調査した結果、EditTextを拡張することが最善の策のようです。私はどういうわけかそれらのSpanクラスの使い方を理解し、それらを使用(拡張)することでほとんどのトリックを実行できるはずだと思います。
たとえば、BulletSpanを拡張し、drawLeadingMarginをオーバーライドすると、弾丸の外観を制御できるようになります。LeadingMarginSpanを拡張すると、番号付きリストで役立つはずです。
テーブルに関しては、私の最初の計画は、LineBackgroundSpanを拡張し、drawBackgroundオーバーライドですべてのテーブル境界線を描画することです。ただし、テーブルセル内のすべてのテキストをレイアウトし、キャレットの移動と選択を適切に処理する方法を理解する必要があります。提案?
