Besoin de faire TextView faire défiler verticalement automatiquement
Je suis en train de développer une activité qui sera le cadre d'une simple application de chat pour un projet de collège. Je veux avoir une configuration où j'ai un EditText
et un Button
qui lorsqu'il est pressé prend la EditText
texte et ajoute le contenu d'un TextView
dans la même activité. Cela semble fonctionner très bien pour moi jusqu'à présent, mais je veux aussi faire en sorte que lorsqu'un message est envoyé à l'affichage sur l' TextView
si il n'y a pas assez d'espace pour afficher la nouvelle ligne de texte à faire défiler vers le bas automatiquement.
C'est ce que mon onCreate()
dans l'Activité ressemble
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText edit = (EditText) findViewById(R.id.editText1) ;
final Button button = (Button) findViewById(R.id.button1) ;
final TextView text = (TextView) findViewById(R.id.textView1) ;
//text.setMaxHeight(200);
text.setSelected(true);
text.setMovementMethod(new ScrollingMovementMethod());
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(edit.getText().length() > 0) {
text.append(edit.getText() + "\n") ;
edit.setText("");
}
}
});
}
C'est la section pertinente de l'Activité XML du fichier de mise en page.
<TextView
android:id="@+id/textView1"
android:ellipsize="marquee"
android:focusable="false"
android:marqueeRepeatLimit="marquee_forever"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="70dp"
android:text=""
android:scrollbars ="vertical"
android:maxLines="10" />
Ce que je fais mal? Ou suis-je un malentendu et c'est ce que je veux n'est pas possible avec un textview?
EDIT: Plein de fichier XML
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:id="@+id/button1"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/editText1"
android:layout_alignBottom="@+id/editText1"
android:layout_alignParentRight="true"
android:text="@string/okString" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="107dp"
android:layout_toLeftOf="@+id/button1"
android:ems="10" />
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="70dp"
android:ellipsize="marquee"
android:focusable="false"
android:marqueeRepeatLimit="marquee_forever"
android:maxLines="10"
android:scrollbars="vertical"
android:text=" " />
</ScrollView>
TextView
à l'intérieur d'un ScrollView
J'ai juste fait que, par le biais de la mise en page graphique de l'interface dans eclipse et il semble que l'application ne fonctionne pas aujourd'hui. (être "Malheureusement, <nom> a arrêté." dès qu'il charge sur l'uem)
J'ai remarqué dans le journal maintenant, c'était à se plaindre qu'il ne peut pas lancer de
ScrollView
à TextView
... je ne comprends pas pourquoi ce qui se passe.Vous pouvez poster de mise en page complète fichier xml et le code aussi?
Sûr, va le faire le plus tôt possible. Le XML qui est. Il n'y a vraiment pas beaucoup plus pour le code; le générés automatiquement onCreateOptionsMenu.
OriginalL'auteur The Ice Mage | 2013-11-25
Vous devez vous connecter pour publier un commentaire.
Vous ne devez pas mettre défilement vertical composant à l'intérieur de défilement vertical scrollview, et depuis votre textview est scrollable, je ne vois pas pourquoi vous avez besoin de la scrollview en premier lieu.
Ensuite, vous pouvez utiliser du texte.setScrollY(le texte.getLayout().getHeight()). Je ne suis pas sûr si cela va fonctionner, mais si elle n'est pas, vous pouvez essayer Obtenir la taille d'un texte dans TextView
OriginalL'auteur Frane Poljak
XML
Remarque:
Instead of storing your text as normal string save it in HTML format which will add line break in your text.
puis ajoutez cette ligne de code ci-dessus
Ce sera le retour de plus de bon résultat
OriginalL'auteur Shakeeb Ayaz
En supposant que vous avez inséré une balise de fermeture
</RelativeLayout>
dans votre fichier xml, j'ai essayé ton code et il fonctionne très bien sur ma fin. S'il vous plaît essayer de nettoyer projet et de le reconstruire à nouveau à partir deEDIT: Pouvez-vous s'il vous plaît essayez ceci pour la mise en page? Veuillez noter que j'ai enlevé le ScrollView de la mise en page et inséré la ligne
text.setMovementMethod(new ScrollingMovementMethod());
de nouveau.Édité le commentaire avec le fichier de mise en page. Veuillez noter que le défilement commence à fonctionner après que vous avez inséré 10 lignes dans un textview que vous avez défini android:maxlines="10"
Upvoted parce que vous avez été très utile pour faire le tri dans certains points, mais d'accepter Frane de réponse parce qu'il a donné la seule chose qui a été crucial à ce que je cherchais; pour l'affichage de texte à faire défiler le texte sans que l'utilisateur le toucher quand il y a plus de lignes que le max de la ligne de valeur.
Pas de soucis. Un plaisir de vous aider 🙂
OriginalL'auteur Harsh Singal