> Java > java지도 시간 > Android에서 텍스트 페이지 매김을 구현하는 방법은 무엇입니까?

Android에서 텍스트 페이지 매김을 구현하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-11-09 06:25:02
원래의
278명이 탐색했습니다.

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);
    }
}
로그인 후 복사

PagedTextView 라이브러리

더 쉬운 통합을 위해 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿