Maison >Java >javaDidacticiel >Comment implémenter la pagination du texte dans Android ?

Comment implémenter la pagination du texte dans Android ?

DDD
DDDoriginal
2024-11-09 06:25:02295parcourir

How to Implement Text Pagination in Android?

Pagination du texte dans Android

Détermination du texte visible

Pour vérifier le texte visible à l'écran, attendez la fin de la mise en page du texte, puis récupérez-le à l'aide :

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);

            }
        });

Résumé de l'algorithme

Objectif : Casser de nouvelles pages lorsque la dernière ligne visible correspond entièrement à la hauteur de la vue.

Détails de mise en œuvre

La classe Pagination implémente la logique nécessaire :

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 ...
    }
}

Flux d'algorithme

  1. Parcourir les lignes de texte.
  2. Vérifiez si le bas de la ligne dépasse la hauteur de la vue.
  3. Si c'est le cas, cassez une nouvelle page et ajustez le calcul de la hauteur cumulée.

Exemple d'utilisation

L'exemple ci-dessous applique la pagination à un HTML mixte et Chaîne étendue :

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);
    }
}

Bibliothèque PagedTextView

Considérez la bibliothèque PagedTextView pour une intégration plus facile :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn