Android: odcięto ostatni wiersz widoku tekstu

113

Mam linię poziomą LinearLayoutzawierającą a, TextViewpo której następuje a Spinner. Jest LinearLayoutto wielokrotnie dynamicznie zawyżane w ustalonej pionie LinearLayoutzawartej w RelativeLayout.

Problem polega na tym, że odkąd przełączyłem się z Theme.lightna Theme.holo.light, ostatnia linia została TextViewprzecięta o połowę. Dzieje się tak, gdy tekst dynamiczny jest długi i obejmuje więcej niż jeden wiersz.

wprowadź opis obrazu tutaj

Udało mi się to naprawić, dodając dolną wyściółkę do poziomu LinearLayoutzawierającego TextViewi Spinner.

To nie jest poprawka, ale raczej włamanie. Czy ktoś może mi doradzić, jak to naprawić?

Przeczytałem też kilka innych pytań, ale żadne nie wydają się pomocne.

Poziomy układ liniowy:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_marginRight="20dp"
        android:text="TextView"/>

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

Względny układ, w którym powyższy układ jest dynamicznie zawyżany w układzie liniowym o identyfikatorze ll2_7:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/relLayoutButtonNext"
        android:layout_below="@id/textView1" >

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="20dp"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:paddingTop="10dp" >

            <TextView
                android:id="@+id/textView10"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingRight="30dp"
                android:text="2.7" />

            <TextView
                android:id="@+id/textView11"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:layout_toRightOf="@id/textView10"
                android:text="@string/question2_7" />


            <LinearLayout
                android:id="@+id/ll2_7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/textView11"
                android:layout_below="@+id/textView11"
                android:orientation="vertical" android:layout_marginBottom="20dp">
            </LinearLayout>

        </RelativeLayout>

    </ScrollView>

</RelativeLayout>

EDYCJA: Oto pełny plik XML układu dla powyższego:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        style="@style/question_section_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="@string/question2_header" />

    <RelativeLayout
        android:id="@+id/relLayoutButtonNext"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@color/bottomBar"
        android:paddingBottom="3dp"
        android:paddingLeft="50dp"
        android:paddingRight="50dp"
        android:paddingTop="3dp" >

        <Button
            android:id="@+id/buttonNext"
            android:layout_width="180dp"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:onClick="nextStep"
            android:text="Next Section"
            android:textSize="20sp" />

        <Button
            android:id="@+id/buttonPrevious"
            android:layout_width="180dp"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:onClick="previousStep"
            android:text="Previous Section"
            android:textSize="20sp" />
    </RelativeLayout>


    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/relLayoutButtonNext"
        android:layout_below="@id/textView1" >



        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="20dp"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:paddingTop="10dp" >

            <TextView
                android:id="@+id/textView10"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingRight="30dp"
                android:text="2.7" />

            <TextView
                android:id="@+id/textView11"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:layout_toRightOf="@id/textView10"
                android:text="@string/question2_7" />


            <LinearLayout
                android:id="@+id/ll2_7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/textView11"
                android:layout_below="@+id/textView11"
                android:orientation="vertical" android:layout_marginBottom="20dp">

            </LinearLayout>

            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/textView10"
                android:layout_below="@+id/ll2_7"
                android:text="2.8" />

            <TextView
                android:id="@+id/textView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/ll2_7"
                android:layout_toRightOf="@+id/textView10"
                android:text="@string/question2_8" android:layout_marginBottom="10dp"/>


            <LinearLayout
                android:id="@+id/ll2_8"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/textView3"
                android:layout_below="@+id/textView3"
                android:layout_marginBottom="20dp"
                android:orientation="vertical" >

            </LinearLayout>

            <TextView
                android:id="@+id/textView4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/textView2"
                android:layout_below="@+id/ll2_8"
                android:text="2.9" />

            <TextView
                android:id="@+id/textView5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/ll2_8"
                android:layout_toRightOf="@+id/textView10"
                android:text="@string/question2_9" android:layout_marginBottom="10dp"/>


            <LinearLayout
                android:id="@+id/ll2_9"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/textView5"
                android:layout_toRightOf="@+id/textView10"
                android:orientation="vertical" android:layout_marginBottom="20dp">

            </LinearLayout>

            <TextView
                android:id="@+id/textView6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/textView4"
                android:layout_below="@+id/ll2_9"
                android:text="2.10" />

            <TextView
                android:id="@+id/textView7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/ll2_9"
                android:layout_toRightOf="@+id/textView10"
                android:text="@string/question2_10" android:layout_marginBottom="10dp"/>


            <LinearLayout
                android:id="@+id/ll2_10"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/textView7"
                android:layout_marginBottom="20dp"
                android:layout_toRightOf="@+id/textView10"
                android:orientation="vertical" >

            </LinearLayout>

            <TextView
                android:id="@+id/textView8"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/textView6"
                android:layout_below="@+id/ll2_10"
                android:text="2.11" />

            <TextView
                android:id="@+id/textView9"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/ll2_10"
                android:layout_toRightOf="@+id/textView10"
                android:text="@string/quesiton2_11" android:layout_marginBottom="10dp"/>


            <LinearLayout
                android:id="@+id/ll2_11"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/textView9"
                android:layout_below="@+id/textView9"
                android:orientation="vertical" android:layout_marginBottom="20dp">

            </LinearLayout>

            <TextView
                android:id="@+id/textView12"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/textView8"
                android:layout_below="@+id/ll2_11"
                android:text="2.11.1" />

            <TextView
                android:id="@+id/textView13"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/ll2_11"
                android:layout_toRightOf="@+id/textView10"
                android:text="@string/question2_11_1" android:layout_marginBottom="10dp"/>


            <LinearLayout
                android:id="@+id/ll2_11_1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/textView13"
                android:layout_toRightOf="@+id/textView10"
                android:orientation="vertical" android:layout_marginBottom="20dp">

            </LinearLayout>

        </RelativeLayout>

    </ScrollView>

</RelativeLayout>
Rynardt
źródło
spróbuj usunąć androida: paddingBottom = "20dp"
Dheeresh Singh
2
Spróbuj dopełnić widok tekstu, a liniowe marginesy układu mogą również dać miłą rękę
Aashish Bhatnagar
LinearLayout jest naprawdę problematyczny, gdy jest używany poziomo. Zamiast tego użyj ConstraintLayout. Widzieć. stackoverflow.com/a/48677954/630668
Dharmendra

Odpowiedzi:

55

Napotkałem ten sam problem z odcięciem, jak pokazano na zrzucie ekranu. Jest to spowodowane wyrównaniem linii bazowej w poziomie LinearLayout. TextViewi Spinnermają różne linie bazowe ze względu na różnice w rozmiarze czcionki. Aby rozwiązać ten problem, należy wyłączyć wyrównanie linii bazowej dla układu, ustawiając:

android:baselineAligned="false"

lub w kodzie:

layout.setBaselineAligned(false);
Jusid
źródło
2
Chciałbym móc zagłosować w górę 100 razy! W ciągu ostatnich kilku dni zmarnowałem dużo czasu na ten problem, a Twoja odpowiedź była moim rozwiązaniem! Nie zdawałem sobie sprawy, co się dzieje przez tak długi czas, ponieważ tak trudno jest debugować hierarchię widoków na Androidzie. Dzięki wielkie!!!
mbm29414
To było rozwiązanie mojego problemu, oprócz odpowiedzi Rynardt. Dziękuję Ci!
James Dobson,
1
To jest poprawna odpowiedź i wskazuje na przyczynę błędu. Dzięki.
Hoang Nguyen Huu
To świetna wskazówka w takich sytuacjach. Tak ogólnie to nieźle. Dziękuję Ci!
sunlover3
259

Po wypróbowaniu miliona różnych rzeczy myślę, że mam odpowiedź.

Zastosowałem a LayoutGravitydo elementu TextView:

android:layout_gravity="fill"

Wydaje się, że rozwiązuje wszystkie problemy z przycinaniem, które miałem. Mam nadzieję, że pomoże to komuś z tym samym problemem.

Rynardt
źródło
12
doskonały, tnx, +1; Zwróć uwagę, że wiele wartości layout_gravity pomaga, np. center_vertical
Grzegorz Dev
2
Tam, gdzie to nie zadziała, powinno zadziałać dodanie wartości dopełnienia „1sp”. Tworzę styl rozszerzający @android:style/Widget.TextViewi dodaję następujące linie:<item name="android:gravity">fill</item> <item name="android:padding">1sp</item>
Graeme
dlaczego ten problem występuje tylko w przypadku tekstu arabskiego ?!
Menna-Allah Sami
12
To tylko obejście. Właściwym rozwiązaniem jest dodanie android:baselineAligned="false"doLinearLayout
tomrozb
1
Chociaż wydaje się, że to działa, właściwym rozwiązaniem jest to z powyższego komentarza tomrozba lub odpowiedź Jusid
Eduard B.
28

Miałem ten sam problem i stwierdziłem, że po prostu dodałem

android:includeFontPadding="false"

ostatnia linia tekstu nie miała już obciętych dolnych krawędzi.

Neal Sanche
źródło
1
W przypadku czcionek niestandardowych może to być idealne rozwiązanie. To jedyne rozwiązanie, które działało u mnie podczas korzystania z Droid Sans Japanese.
computingfreak
11

Dodałem trochę pustej spacji po tekście, dodając

textView.setText(firstString+"\n");

Wypróbowałem wszystkie inne rozwiązania, ale to było jedyne rozwiązanie, które zadziałało

Ameer
źródło
to, co nazywacie „chepi”
Zulqurnain Jutt
6

Umieść problematyczny widok tekstu w układzie framelayout. Myślę, że widok tekstu nie jest poprawnie obliczany z powodu widoku rodzeństwa, Spinner.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <FrameLayout
        android:layout_width="150dp"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/textView1"
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"
            android:text="TextView"/>
    </FrameLayout>
    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>
Rubin Yoo
źródło
1
Miałem CheckBoxw tym samym LinearLayout. To rozwiązało problem.
Chintan Shah
Działał jak urok w sytuacji CheckBox, takiej jak @ChintanShah
ignacardel
5

W takim przypadku należy upewnić się, że TextViewnie jest większy niż jego pojemnik -

Jeśli a TextViewjest ustawiony na wrap_contenti jego pojemnik (lub pojemnik przodka) nie pozostawia miejsca, TextVieww którym mógłby w nim wyrosnąć, może zostać zatkany.

Jeśli tak nie jest, to jest to również możliwe, onMeasure()z TextViewczasem nie prawidłowo zmierzyć ogonki liter, znaków spoza alfabetu łacińskiego lub efekty z tych tekstów jest pochylony. Możesz to naprawić, ustawiając globalny styl dla swojego, TextViewaby został pobrany bez konieczności zmiany całej bazy kodu:

Upewnij się, że Twoja aplikacja / działania używają niestandardowego motywu, takiego jak:

<style name="Custom" parent="@android:style/Theme.Light">   
    <item name="android:textViewStyle">@style/Custom.Widget.TextView</item>
</style>

<style name="Custom.Widget.TextView" parent="@android:style/Widget.TextView"> 
    <item name="android:gravity">fill</item>
    <item name="android:padding">1sp</item>
</style>

Odpowiedź @Rynadt była bardzo pomocna w dotarciu do powyższego etapu. Ustawienie wagi tekstu wewnątrz widoku zapewnia na niektórych urządzeniach, że okluzja nigdy nie ma miejsca (tekst jest prawidłowo dopasowany w widoku), na innych pomocna dłoń z dopełnieniem wartości sp zapewnia, że ​​ogony i inne są uwzględniane z wartością określoną dla TextSize.

Graeme
źródło
5

Moje rozwiązanie było zbliżone do zaakceptowanego, ale musiałem zmienić je na

   android:layout_gravity="fill_vertical"

zamiast. W przeciwnym razie pozostałe wiersze również byłyby rozciągnięte z dodanymi przerwami w wierszach w przypadkowych miejscach. Na przykład największy wiersz miał 4 wiersze, więc inny wiersz został zmieniony z

this is a testphrase

do

thi
s is
a testph
rase
Spookysister
źródło
1
Pracuje dla mnie. Dzięki! +1
Ahmed
5

Znalazłem inne rozwiązanie, rozszerzając TextView i dodając niestandardową klasę w następujący sposób:

 public class AdaptingTextView extends TextView {

    public AdaptingTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public AdaptingTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public AdaptingTextView(Context context) {
        super(context);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);

        // set fitting lines to prevent cut text
        int fittingLines = h / this.getLineHeight();
        if (fittingLines > 0) {
            this.setLines(fittingLines);
        }
    }

}
Wyświetlana nazwa
źródło
Działa świetnie, ale zachowaj ostrożność, jeśli w widoku tekstu określono layout_margin, ponieważ może to zmienić liczbę dopasowanych wierszy, aby była krótsza niż powinna!
Przerzuciłem się
1
To działa absolutnie idealnie. Zdecydowanie najlepsze rozwiązanie, jakie znalazłem.
Moonbloom
1
To jest poprawna odpowiedź, dzięki! Aby uczynić to trochę ładniejszym i dodać „...” na końcu tekstu, zanim zostanie on obcięty, dodaj this.setEllipsize(TextUtils.TruncateAt.END);powyższą instrukcję if i usuń android:ellipsize="end"z XML-a, który z jakiegoś powodu go łamie.
NeilS
4

spróbuj usunąć androida: paddingBottom = "20dp"

z

 <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="20dp"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:paddingTop="10dp" >
Dheeresh Singh
źródło
1
Dopełnienie tam w rzeczywistości nie jest powiązane, ponieważ w tym względnym układzie znajdują się dodatkowe elementy z wypełnieniem. Usunąłem je, aby ułatwić czytanie tego postu. Zobacz sporną zmianę.
Rynardt
4

getViewTreeObserver().addOnGlobalLayoutListenernie działa w widoku recyklera. Jeśli używasz recyklera, użyj View.addOnLayoutChangeListener:

Zauważyłem, że elipsa, którą zdefiniowałem textVieww xml, nie zawsze była odzwierciedlona, ​​więc programowo ustawiłem ją przed ponownym przypisaniem właściwości text. To zadziałało dla mnie.

textView.addOnLayoutChangeListener(new OnLayoutChangeListener() {
    @Override
        public void onLayoutChange(View v, int left, int top, int right, int bottom,
                                   int oldLeft, int oldTop, int oldRight, int oldBottom) {
            textView.removeOnLayoutChangeListener(this);
            float lineHeight = textView.getLineHeight();
            int maxLines = (int) (textView.getHeight() / lineHeight);
            if (textView.getLineCount() != maxLines) {
                textView.setLines(maxLines);
                textView.setEllipsize(TextUtils.TruncateAt.END);
                // Re-assign text to ensure ellipsize is performed correctly.
                textView.setText(model.getText());
            }
        }
    });
mp501
źródło
3

Jeśli masz ten problem i TextViewznajdujesz się wewnątrz a RelativeLayout, spróbuj zamienić RelativeLayoutna LinearLayout.

To rozwiązało problem

JesperB
źródło
To jedyne rozwiązanie, które na mnie działa (dziwne zachowanie)! Dzięki
mrroboaat
1
Jak można po prostu „przełączyć” z RelativeLayout na LinearLayout? Jeśli potrzebujesz układu względnie, implementacja z LinearLayout jest prawie niemożliwa.
Niesamowity
3

Możesz użyć odbiornika globalnego układu dla TextView w dowolnym typie ViewGroup.

    final TextView dSTextView = (TextView)findViewById(R.id.annoyingTextView);
dSTextView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

    @Override
    public void onGlobalLayout() {
        dSTextView.getViewTreeObserver().removeOnGlobalLayoutListener(this);

        float lineHeight = dSTextView.getLineHeight();
        int maxLines = (int) (dSTextView.getHeight() / lineHeight);

        if (dSTextView.getLineCount() != maxLines) {
            dSTextView.setLines(maxLines);
        }

    }
});

Więcej na ten temat przeczytasz tutaj

Jim Baca
źródło
1

Myślę, że niewiele można zrobić, aby to zadziałało, zmieniając układy. Ponieważ odkryłem, że niektóre metody działają tylko w niektórych przypadkach. Myślę, że zależy to od całej hierarchii układu i nie jest rozwiązaniem uniwersalnym. Zauważyłem również, że dzieje się tak szczególnie, gdy masz inną czcionkę, którą chcesz ustawić na TextView.

Pewna metoda ujęcia, którą eksperymentowałem i testowałem, polega na tym, że możesz ustawić atrybuty czcionki w kodzie po zawyżeniu widoku. Zakładam, że masz czcionkę w folderze aktywów / czcionek, którą chcesz.

Na przykład we fragmencie:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState)
{
    View view = inflater.inflate(R.layout.fragment_view, container, false);
    TextView tv = (TextView)view.findViewById(R.id.text_view);
    tv.setText("Insert text that needs to be displayed");
    AssetManager assetManager = getContext().getAssets();
    Typeface typeFace = Typeface.createFromAsset(assetManager, "Fonts/OpenSans-Light.ttf");
    tv.setTypeface(typeFace , 0); // 0 is normal font
    tv.setPadding(10,  0, 10, 0); // This is not mandatory
}

Oraz w działaniu:

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(Resource.Layout.main_activity);
    TextView tv = (TextView)this.findViewById(R.id.text_view);
    tv.setText("Insert text that needs to be displayed");
    AssetManager assetManager = getContext().getAssets();
    Typeface typeFace = Typeface.createFromAsset(assetManager, "Fonts/OpenSans-Light.ttf");
    tv.setTypeface(typeFace , 0); // 0 is normal font
    tv.setPadding(10,  0, 10, 0); // This is not mandatory
}
Mahesh Iyer
źródło
1

Mam ten sam problem i jest on bardzo irytujący.

Dzieje się tak tylko w przypadku tekstu arabskiego.

Jeśli utworzysz etykietę wielowierszową i dodasz plik \n na końcu swojego ciągu, naprawiłoby to, ale problem polega na tym, że byłaby duża przerwa między tą etykietą a obiektem pod nią, ze względu na fakt, że to pole teraz ma nowy pusty wiersz poniżej.

Aby obejść ten problem, można zrobić niestandardową kontrolę. Ale ogólnie jest to irytujący błąd.

Adel Ammari
źródło
Jeśli masz NOWE pytanie, zadaj je, klikając przycisk Zadaj pytanie . Jeśli masz wystarczającą reputację, możesz zagłosować za pytaniem. Możesz też oznaczyć je jako ulubione, a otrzymasz powiadomienie o wszelkich nowych odpowiedziach.
Martijn Pieters
0

Najlepszym sposobem obejścia tego problemu jest dodanie fikcyjnego widoku o żądanej wysokości (tj. Doda to samo wypełnienie) u dołu widoku.

<TableRow
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:layout_marginLeft="5dp"
 android:layout_marginRight="5dp" >
     <View 
       android:layout_width="match_parent" 
       android:layout_height="30dp"/>
</TableRow>

Tak jak w moim przypadku dodałem jeszcze jeden wiersz tabeli u dołu widoku. Mam nadzieję, że to może komuś pomóc.

Anuj Sharma
źródło
0

Wiem, że jest tak późno, ale dla mnie to działa jak urok. dodaj ten kod do swojegotextview

android:ellipsize="marquee"
android:layout_weight="1"
zroszony
źródło
0

Dodaj dopełnienie u dołu widoku tekstu:

android:paddingBottom="24dp"
Phil
źródło
-1

W końcu to naprawiłem!

Próbuję dodać ciąg do TextView w usłudze, a następnie wywołuję scrollTo (), ostatnia linia zostaje odcięta!

ScrollTo () powinien być wywoływany w „Runnable”, na przykład:

private ScrollView mScrollView;
public void scrollToBottom()
{
    mScrollView = (ScrollView) findViewById(R.id.debug_textview_scrollview);
    mScrollView.post(new Runnable()
    {
        public void run()
        {
            mScrollView.fullScroll(View.FOCUS_DOWN);
        }
    });
}

Myślę, że to dlatego, że w monencie wywołania scrollTo () w serwisie aktualizacja TextView nie jest gotowa.

kazon
źródło