Pytanie Automatyczne przewijanie widoków przewijanych w przeglądarce w miarę dodawania tekstu


Mam widok przewijania zawierający widok tekstowy w aplikacji na Androida. Ten widok tekstowy będzie miał dołączony do niego tekst w stałych odstępach czasu. Przewijanie działa, a tekst dodaje się dobrze, ale chciałbym, aby przewijanie było automatycznie przewijane w dół po dodaniu tekstu. W miarę dodawania nowego tekstu na dole, automatycznie przewija się w dół, aby dopasować, a stary tekst jest wypychany poza zasięg wzroku u góry. Jeszcze lepiej byłoby dodać tekst na dole przewijania i popchnąć starszy tekst w górę, ale jedną rzecz na raz.


21
2018-03-07 20:17


pochodzenie


Cóż ... lekceważ to. Głupie, że nie ustawiam grawitacji "na dole" w tekście (a nie w przewijanym). Spowoduje to umieszczenie nowego tekstu na dole i przewijanie w celu znalezienia nowego tekstu. Yay! - AndroidHopeful
możesz napisać o swoim rozwiązaniu w odpowiedzi, a następnie oznaczyć je jako wybrane. W ten sposób, gdy inni ludzie napotkają ten sam problem, zobaczą, że istnieje rozwiązanie. - Shade
to fajne rozwiązanie i powinieneś opublikować to jako odpowiedź. - dylan murphy


Odpowiedzi:


<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:fillViewport="true"
    >
    <TextView
        android:id="@+id/statusText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom" />
</ScrollView>

18
2017-07-06 21:14



Dziękuję, to działało dla mnie. - BostonGeorge


Próbowałem rozwiązania z grawitacją, ale wynikiem było dużo pustej przestrzeni pod faktycznym tekstem po przewinięciu do dołu.

To jest inny sposób. Możesz umieścić swój tekstView wewnątrz ScrollView:

<ScrollView
    android:id="@+id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:fillViewport="true" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</ScrollView>

I zdefiniuj addTextChangedListener

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

            //some code here

        ScrollView scrollView1 = (ScrollView) findViewById(R.id.scrollView1);
        TextView textView1 = (TextView) findViewById(R.id.textView1);
        textView1.addTextChangedListener(new TextWatcher() {

        @Override
        public void afterTextChanged(Editable arg0) {
            scrollView1.fullScroll(ScrollView.FOCUS_DOWN);
            // you can add a toast or whatever you want here
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1,
                int arg2, int arg3) {
            //override stub
        }

        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {
            //override stub
        }

    }) }

Właściwie zauważyłem już teraz, że aplikacja będzie przewijana za każdym razem, gdy tekst zostanie zmieniony, a nie tylko dodany. Jednak dla mnie to działa dobrze.


8
2017-11-08 13:57



Ten jest jedyny, który działa dla mnie (API 23). The android:layout_gravity="bottom" podstęp sprawiał, że nie mogłem przewinąć ręcznie i dodałem mnóstwo wolnego miejsca pod tekstem. Ten nie dodaje pustego miejsca i umożliwia normalne przewijanie. - Shlublu


Możesz po prostu przewijać całość ScrollView na dole po dodaniu tekstu.

textView.append(text);
scroll.fullScroll(View.FOCUS_DOWN)

2
2018-02-11 09:24



Nie zapomnij zadzwonić do fullScroll wewnątrz wywołania scroll.post - Raphael Royer-Rivard


textView.append(text);
scroll.fullScroll(View.FOCUS_DOWN)

to da problem, nie przewinie do góry, z powodu android:layout_gravity="bottom"


0
2018-03-14 06:39



genialne rozwiązanie, dzięki - Simon Schubert
To powinno być oznaczone jako odpowiedź. - busuu