8

テキストを管理するカスタム レイアウトを作成しています。メソッドの実装を開始する前にViewGroup#onMeasure()、EditText のソース コード、特にEditText#onMeasure()メソッドの部分を掘り下げました。それで私はに出くわしました BoringLayout。ドキュメントを読みましたが、実際のカスタム実装でそれを使用する方法についての説明があまり見つかりませんでした。次に、私の質問は、それを正しい方法でどのように使用できるか、そしてそれが本当に必要な場合です.

4

2 に答える 2

1

技術的には、`canvas.drawText("text"); を使用してキャンバスにテキストを描画できます。
ただし、テキストは非常に一般的な用語であり、非常に複雑になる可能性があります。それは LeftToRight ですか、それとも RightToLeft ですか? それは楕円形ですか?それは単一または複数行ですか?...

android.text.Layout は、これらすべてを処理するためにここにあります。

それを使用する典型的な方法は次のとおりです。

        BoringLayout.Metrics boring = BoringLayout.isBoring(mText, mPaint);
    if (boring != null) {
        // this is boring !
        if (mSavedLayout != null) {
            mLayout = mSavedLayout.replaceOrMake(mText,
                    mPaint,
                    availableWidth,
                    Layout.Alignment.ALIGN_NORMAL,
                    SPACING_MULT,
                    SPACING_ADD,
                    boring,
                    true,
                    TextUtils.TruncateAt.END,
                    availableWidth);
        } else {
            mLayout = BoringLayout.make(mText,
                    mPaint,
                    availableWidth,
                    Layout.Alignment.ALIGN_NORMAL,
                    SPACING_MULT,
                    SPACING_ADD,
                    boring,
                    true,
                    TextUtils.TruncateAt.END,
                    availableWidth);
        }
        mSavedLayout = (BoringLayout) mLayout;
    } else {
        mLayout = new StaticLayout(mText,
                0,
                mText.length(),
                mPaint,
                availableWidth,
                Layout.Alignment.ALIGN_NORMAL,
                SPACING_MULT,
                SPACING_ADD,
                true,
                TextUtils.TruncateAt.END,
                availableWidth);
    }
于 2015-05-26T08:51:04.200 に答える