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); } });
Objectif : Casser de nouvelles pages lorsque la dernière ligne visible correspond entièrement à la hauteur de la vue.
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 ... } }
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); } }
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!