Maison > Java > javaDidacticiel > le corps du texte

Comment implémenter la pagination du texte dans Android ?

DDD
Libérer: 2024-11-09 06:25:02
original
244 Les gens l'ont consulté

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

            }
        });
Copier après la connexion

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 ...
    }
}
Copier après la connexion

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);
    }
}
Copier après la connexion

Bibliothèque PagedTextView

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

dependencies {
    implementation 'com.github.onikx:pagedtextview:0.1.3'
}
Copier après la connexion
<com.onik.pagedtextview.PagedTextView
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal