59

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オーバーライドですべてのテーブル境界線を描画することです。ただし、テーブルセル内のすべてのテキストをレイアウトし、キャレットの移動と選択を適切に処理する方法を理解する必要があります。提案?

4

7 に答える 7

14

リッチ テキスト エディター コンポーネントを Apache 2.0 ライセンスで公開しました。

https://github.com/1gravity/Android-RTEditor

ここに画像の説明を入力

于 2015-06-02T18:53:24.773 に答える
4

必要な大きな変更があった場合、おそらく両方EditTextを拡張するTableLayoutか、少なくともそれらのソースのほとんどを使用することになります。

于 2011-01-15T06:30:35.243 に答える
3

次のことができますか。

  1. EditText 内のコンテンツを独自のモデルとして手動で保持します (つまり、コンテンツ ドキュメントとビュー属性を別個のエンティティとして分離および維持することによって)。
  2. render (または draw メソッド) をオーバーライドして、非テキスト文字 (特定の属性を持つ箇条書きなど) を処理するコンテンツ ドキュメントの部分 (モデルの一部) でカスタム レイアウトを実行します。

レイアウトをいじる必要がある場合は、自分でゼロから作成したほうがよいように思えます。私が覚えていることから、編集テキスト (および豊富なテキスト エディター) は、データが純粋なテキストである場合に最適です。

于 2011-01-15T00:09:12.843 に答える
2

android-richtexteditorと呼ばれるオープンソースのEditTextリッチテキストエディターがありますが、コードはr5で不可解に削除されました。コードはまだr4にあります; svnを使用してr4以前をチェックアウトしてアクセスします。このコードは、斜体、下線、カラーピッカー、テキストサイズなどをサポートしているようです。

これらの質問にも答えまし1、2

于 2011-12-15T22:19:38.073 に答える
-1

EditText から拡張するのが最適です。CharacterSpan と ParagraphSpan をサポートします。

Google Play で私のアプリをご覧ください: https://play.google.com/store/apps/details?id=com.hly.notes

于 2012-05-28T03:20:47.313 に答える
-1

このオープン ソースの Android 向け Wordpress モバイルアプリケーションを確認してください。Edittext に基づく非常に有望なRichtexteditorがあります。

ここからソースをダウンロードできます

ありがとう

于 2013-09-09T08:56:39.033 に答える