ホームページ  >  記事  >  Java  >  Android でテキストのページネーションを実装するにはどうすればよいですか?

Android でテキストのページネーションを実装するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-09 06:25:02239ブラウズ

How to Implement Text Pagination in Android?

Android でのテキストのページ分割

表示テキストの決定

画面上に表示されるテキストを確認するには、テキスト レイアウトの完了を待ってから、次を使用してテキストを取得します。 :

ViewTreeObserver vto = txtViewEx.getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                ViewTreeObserver obs = txtViewEx.getViewTreeObserver();
                obs.removeOnGlobalLayoutListener(this);
                height = txtViewEx.getHeight();
                scrollY = txtViewEx.getScrollY();
                Layout layout = txtViewEx.getLayout();

                firstVisibleLineNumber = layout.getLineForVertical(scrollY);
                lastVisibleLineNumber = layout.getLineForVertical(height+scrollY);

            }
        });

アルゴリズムの概要

目的: 表示されている最後の行がビューの高さ内に完全に収まるときに、新しいページを分割します。

実装の詳細

Pagination クラスは必要なロジックを実装します。

public class Pagination {
    // Configuration parameters
    private boolean mIncludePad;
    private int mWidth;
    private int mHeight;
    private float mSpacingMult;
    private float mSpacingAdd;
    private CharSequence mText;
    private TextPaint mPaint;
    private List<CharSequence> mPages;

    public Pagination(CharSequence text, int pageW, int pageH, TextPaint paint, float spacingMult, float spacingAdd, boolean inclidePad) {
        // ... initialization ...
        layout();
    }

    private void layout() {
        // ... perform layout and pagination ...
    }
}

アルゴリズム フロー

  1. テキスト行を反復処理します。
  2. 行の下部が次の値を超えているかどうかを確認します。ビューの高さです。
  3. その場合は、新しいページを分割し、累積高さの計算を調整します。

使用例

以下のサンプルは、混合 HTML にページネーションを適用します。およびスパニング文字列:

public class PaginationActivity extends Activity {
    // ... code ...
    private Pagination mPagination;
    private CharSequence mText;
    private int mCurrentIndex = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // ... code ...
        mText = TextUtils.concat(htmlString, spanString);

        mTextView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            // ... code ...
            mPagination = new Pagination(mText,
                    mTextView.getWidth(),
                    mTextView.getHeight(),
                    mTextView.getPaint(),
                    mTextView.getLineSpacingMultiplier(),
                    mTextView.getLineSpacingExtra(),
                    mTextView.getIncludeFontPadding());
            update();
        });
    }

    private void update() {
        final CharSequence text = mPagination.get(mCurrentIndex);
        if(text != null) mTextView.setText(text);
    }
}

PagesTextView Library

統合を容易にするために PagedTextView ライブラリを検討してください:

dependencies {
    implementation 'com.github.onikx:pagedtextview:0.1.3'
}
<com.onik.pagedtextview.PagedTextView
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

以上がAndroid でテキストのページネーションを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。