Android: dernière ligne de textview coupée

113

J'ai un horizontal LinearLayoutcontenant un TextViewsuivi d'un à Spinnercôté. Ceci LinearLayoutest gonflé dynamiquement plusieurs fois dans une verticale fixe LinearLayoutcontenue dans un fichier RelativeLayout.

Le problème est que depuis que je suis passé de Theme.lightà Theme.holo.light, la dernière ligne de la ligne TextViewest coupée en deux. Cela se produit lorsque le texte dynamique est long et s'étend sur plus d'une ligne.

entrez la description de l'image ici

J'ai pu résoudre ce problème en ajoutant un rembourrage inférieur à l'horizontale LinearLayoutcontenant le TextViewet Spinner.

Cela ne ressemble pas à une solution, mais plutôt à un hack. Quelqu'un peut-il s'il vous plaît me donner quelques conseils sur la façon de résoudre correctement ce problème?

J'ai également lu d'autres questions, mais aucune ne semble aider.

Disposition linéaire horizontale:

<?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>

Disposition relative où la disposition ci-dessus est gonflée dynamiquement à la disposition linéaire avec l'ID 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>

EDIT: Voici la mise en page complète xml pour ci-dessus:

<?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
la source
essayez de supprimer Android: paddingBottom = "20dp"
Dheeresh Singh
2
Essayez le remplissage sur la vue de texte et les marges de mise en page linéaire peuvent également donner une belle main
Aashish Bhatnagar
LinearLayout est vraiment problématique lorsqu'il est utilisé horizontalement. Utilisez plutôt le ConstraintLayout. Voir. stackoverflow.com/a/48677954/630668
Dharmendra

Réponses:

55

J'ai rencontré le même problème de coupure que celui indiqué sur la capture d'écran. Cela est dû à l'alignement de la ligne de base à l'horizontale LinearLayout. TextViewet Spinneront des lignes de base différentes en raison de la différence de taille de police. Pour résoudre le problème, il est nécessaire de désactiver l'alignement de la ligne de base pour la mise en page en définissant:

android:baselineAligned="false"

ou dans le code:

layout.setBaselineAligned(false);
Jusid
la source
2
J'aimerais pouvoir voter 100 fois! J'ai perdu tellement de temps ces derniers jours sur ce problème, et votre réponse était ma solution! Je n'ai pas réalisé ce qui se passait depuis si longtemps car il est si difficile de déboguer la hiérarchie des vues sur Android. Merci beaucoup!!!
mbm29414
C'était la solution à mon problème, en plus de la réponse de Rynardt. Je vous remercie!
James Dobson
1
C'est la bonne réponse et elle indique la raison pour laquelle l'erreur s'est produite. Merci.
Hoang Nguyen Huu
C'est un énorme conseil pour des situations comme celle-ci. Pas mal du tout. Je vous remercie!
sunlover3
260

Après avoir essayé un million de choses différentes, je pense avoir la réponse.

J'ai appliqué un LayoutGravityà l'élément TextView:

android:layout_gravity="fill"

Semble résoudre tous les problèmes d'écrêtage que j'ai eu. J'espère que cela aide quelqu'un avec le même problème.

Rynardt
la source
12
parfait, tnx, +1; notez que de nombreuses valeurs layout_gravity sont utiles, par exemple. center_vertical
Grzegorz Dev
2
Là où cela ne fonctionne pas, l'ajout d'une valeur de remplissage de "1sp" devrait fonctionner. Je crée un style en extension @android:style/Widget.TextViewet ajoute les lignes suivantes:<item name="android:gravity">fill</item> <item name="android:padding">1sp</item>
Graeme
pourquoi ce problème se produit uniquement avec du texte arabe?!
Menna-Allah Sami
12
C'est juste une solution de contournement. La bonne solution est d'ajouter android:baselineAligned="false"à votreLinearLayout
tomrozb
1
Bien que cela semble fonctionner, la solution correcte est celle du commentaire de tomrozb ci-dessus, ou la réponse de Jusid
Eduard B.
28

J'ai eu le même problème et j'ai trouvé que simplement ajouter

android:includeFontPadding="false"

la dernière ligne de texte n'avait plus ses descendants coupés.

Neal Sanche
la source
1
Avec des polices personnalisées, cela pourrait être la solution idéale. C'est la seule solution qui a fonctionné pour moi lors de l'utilisation de Droid Sans Japanese.
computingfreak
11

J'ai ajouté un espace factice après le texte en ajoutant

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

J'ai essayé toutes les autres solutions, mais c'était la seule solution qui fonctionnait pour moi

Ameer
la source
c'est ce que vous appelez "chepi"
Zulqurnain Jutt
6

Mettez la vue de texte problématique dans une mise en page. Je pense que la vue texte n'est pas calculée correctement à cause de la vue frère, 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
la source
1
J'avais CheckBoxen même temps LinearLayout. Cela a résolu le problème.
Chintan Shah
A travaillé comme un charme avec une situation CheckBox comme @ChintanShah
ignacardel
5

Lorsque cela se produit, vous devez vous assurer que le TextView ne devient pas plus grand que son conteneur -

Si a TextViewest défini sur wrap_contentet que son conteneur (ou un conteneur ancêtre) ne laisse pas de place pour que le TextViewse développe, il peut être occlus.

Si ce n'est pas le cas, il est également possible que le onMeasure()de TextViewne mesure parfois pas correctement les queues de lettres, les caractères non latins ou les effets du texte en italique. Vous pouvez corriger cela en définissant un style global pour votre TextViewafin qu'il soit repris sans qu'il soit nécessaire de modifier toute votre base de code:

Assurez-vous que votre application / vos activités utilisent un thème personnalisé comme celui-ci:

<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>

La réponse de @Rynadt a été vraiment utile pour arriver à l'étape ci-dessus. Le réglage de la gravité du texte à l'intérieur de la vue garantit sur certains appareils que l'occlusion n'a jamais lieu (le texte est correctement ajusté à l'intérieur de la vue), sur d'autres, un coup de main avec un remplissage d'une valeur sp, garantit que les queues et autres sont prises en compte avec une valeur spécifique TextSize.

Graeme
la source
5

Ma solution était proche de celle acceptée, mais j'ai dû la changer en

   android:layout_gravity="fill_vertical"

au lieu. Sinon, les autres lignes auraient également été étirées avec des sauts de ligne ajoutés à des endroits aléatoires. Par exemple, la plus grande ligne avait 4 lignes, donc une autre ligne a été modifiée de

this is a testphrase

à

thi
s is
a testph
rase
Spookysister
la source
1
Travaille pour moi. Merci! +1
Ahmed
5

J'ai trouvé une solution différente en étendant TextView et en ajoutant une classe personnalisée comme celle-ci:

 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);
        }
    }

}
Afficher un nom
la source
Fonctionne très bien, mais soyez prudent si layout_margin est spécifié dans la vue de texte, car cela peut modifier le nombre de lignes d'ajustement pour qu'il soit plus court qu'il ne devrait l'être! Je suis passé à l'utilisation du rembourrage au lieu des marges et problème résolu
MobileMon
1
Cela fonctionne parfaitement. De loin la meilleure solution que j'ai trouvée.
Moonbloom
1
C'est la bonne réponse, merci! Pour le rendre un peu plus agréable et ajouter '...' à la fin du texte avant qu'il ne soit tronqué, ajoutez this.setEllipsize(TextUtils.TruncateAt.END);l'instruction if ci-dessus et supprimez android:ellipsize="end"du XML qui, pour une raison quelconque, le casse.
NeilS
4

essayez de supprimer Android: paddingBottom = "20dp"

de

 <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
la source
1
Le remplissage n'est en fait pas lié car il y a des éléments supplémentaires contenus dans cette disposition relative avec le remplissage. Je les ai supprimés pour faciliter la lecture de cet article. Voir la modification en question.
Rynardt
4

getViewTreeObserver().addOnGlobalLayoutListenerne fonctionne pas dans une vue recycleur. Si vous utilisez un recycleur, utilisezView.addOnLayoutChangeListener :

J'ai trouvé que l'ellipse que j'avais définie textViewdans xml n'était pas toujours reflétée, je l'ai donc définie par programme avant de réaffecter la propriété text. Cela a fonctionné pour moi.

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
la source
3

Si vous rencontrez ce problème et que vous vous trouvez TextViewdans un RelativeLayout, essayez de changer le RelativeLayoutpour a LinearLayout.

Cela a résolu le problème pour moi

JesperB
la source
C'est la seule solution qui fonctionne pour moi (comportement étrange)! Thx
mrroboaat
1
Comment pouvez-vous simplement "passer" de RelativeLayout à LinearLayout? Si vous devez relativement mettre en page, il est presque impossible de l'implémenter avec LinearLayout.
L'incroyable janvier
3

Vous pouvez utiliser un écouteur de disposition globale pour un TextView dans n'importe quel type de 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);
        }

    }
});

Vous pouvez en savoir plus ici

Jim Baca
la source
1

Je pense que vous ne pouvez pas faire grand-chose pour que cela fonctionne en modifiant les mises en page. Comme j'ai constaté que certaines méthodes ne fonctionnent que dans certains cas. Je pense que cela dépend de l'ensemble de la hiérarchie de mise en page et que ce n'est pas une solution universelle. J'ai également remarqué que cela se produit surtout lorsque vous avez une police différente que vous souhaitez définir sur TextView.

Une méthode sûre que j'ai expérimentée et testée est que vous pouvez définir les attributs de police dans le code une fois la vue gonflée. Je suppose que vous avez une police dans le dossier assets / fonts que vous voulez.

Par exemple dans un fragment:

@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
}

Et dans une activité:

@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
la source
1

J'ai ce même problème, et c'est très ennuyeux.

Cela n'arrive qu'avec du texte arabe.

Si vous créez l'étiquette sur plusieurs lignes et ajoutez un \n à la fin de votre chaîne, cela résoudrait le problème, mais le problème est qu'il y aurait un grand écart entre cette étiquette et l'objet en dessous, en raison du fait que ce champ a maintenant une nouvelle ligne vide en dessous.

Un contrôle personnalisé peut être effectué pour contourner ce problème. Mais dans l'ensemble, c'est un bug ennuyeux.

Adel Ammari
la source
Si vous avez une NOUVELLE question, posez-la en cliquant sur le bouton Poser une question . Si vous avez une réputation suffisante, vous pouvez voter pour la question. Sinon, ajoutez-le en favori et vous serez informé de toute nouvelle réponse.
Martijn Pieters
0

La meilleure solution pour cela est d'ajouter une vue factice de la hauteur désirée (c'est-à-dire que cela ajoutera un remplissage lui-même) au bas de votre vue.

<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>

Comme dans mon cas, j'ai ajouté une autre ligne de tableau en bas de la vue. J'espère que cela pourrait aider quelqu'un.

Anuj Sharma
la source
0

Je sais qu'il est trop tard, mais c'est un travail comme du charme pour moi. ajoutez ce code à votretextview

android:ellipsize="marquee"
android:layout_weight="1"
couvert de rosée
la source
0

Ajoutez un remplissage au bas de la vue de texte:

android:paddingBottom="24dp"
Phil
la source
-1

Je l'ai finalement réparé!

J'essaye d'ajouter une chaîne au TextView en service , puis j'appelle scrollTo (), la dernière ligne est coupée!

Le scrollTo () doit être appelé dans "Runnable", comme:

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);
        }
    });
}

Je le pense car dans le monent d'appel scrollTo () en service, la mise à jour de TextView n'est pas prête.

kazon
la source