Android: come determinare l'ultima lettera completamente visibile in TextView?



string spannablestring (1)

Penso che prevedere dove un testo andrà a finire sarebbe difficile / impossibile a meno che non stiate usando un font a spaziatura fissa, ad esempio Courier. Ma invece di adottare questo approccio, un'alternativa che posso suggerire è di consegnare semplicemente un numero costante di caratteri per ogni pagina del tuo lettore di libri. Sì, questo significa che con un font non monospazio non si conoscerà il numero esatto di linee da rendere. Tuttavia, il numero di linee occupate dovrebbe rientrare in un intervallo abbastanza ristretto e molto probabilmente non sarebbe percepibile all'utente.

Qui puoi usare una ScrollView , che conterrà l'attuale TextView contenente il testo per ogni pagina. Ecco uno scheletro di come potrebbe essere:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp">

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="...some text..." />
    </ScrollView>
</RelativeLayout>

Usando una ScrollView , l'utente può quindi semplicemente trascinare verso l'alto e verso il basso per catturare qualsiasi contenuto che potrebbe non adattarsi a una singola schermata. Di nuovo, questo ti libera dal doverti preoccupare di fornire una quantità esatta di contenuti.

Sto cercando di costruire un lettore di libri. E ora sto avendo un lungo testo che riempie l'intero schermo e anche parte del testo è fuori dallo schermo. Voglio sapere come trovare l'ultima lettera completamente visibile sullo schermo in modo da poter dividere il testo in pagine.

Ad esempio, tutte le righe prima

"Cattive notizie, Vernon," disse lei ......

sono completamente visibili e il testo rimanente deve essere spostato su un'altra pagina.

In questo modo (un'altra pagina di testo inizia con "Cattive notizie")

Ecco il layout che ho usato nell'esempio sopra

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp">

<TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="...some text..." />
</RelativeLayout>




spannablestring