Quelqu'un peut-il me dire ce qui ne va pas avec le texte? Un texte de plus d'une ligne ne passe pas à la ligne suivante, mais dépasse l'écran.
Voici le code:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:padding="4dip">
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:padding="4dip">
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:padding="4dip">
<TextView
Android:id="@+id/reviewItemEntityName"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="event/venue"
Android:textColor="@color/maroon"
Android:singleLine="true"
Android:ellipsize="end"
Android:textSize="14sp"
Android:textStyle="bold"
Android:layout_weight="1" />
<ImageView
Android:id="@+id/reviewItemStarRating"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentTop="true"
Android:layout_alignParentBottom="true"
Android:src="@drawable/title_1_star" />
</LinearLayout>
<TextView
Android:id="@+id/reviewItemDescription"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Description comes here"
Android:textSize="12sp"
Android:layout_weight="1"/>
</LinearLayout>
</LinearLayout>
Je l'ai corrigé moi-même, la clé est Android:width="0dip"
<LinearLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:padding="4dip"
Android:layout_weight="1">
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:padding="4dip">
<TextView
Android:id="@+id/reviewItemEntityName"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textColor="@color/maroon"
Android:singleLine="true"
Android:ellipsize="end"
Android:textSize="14sp"
Android:textStyle="bold"
Android:layout_weight="1" />
<ImageView
Android:id="@+id/reviewItemStarRating"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentTop="true"
Android:layout_alignParentBottom="true" />
</LinearLayout>
<TextView
Android:id="@+id/reviewItemDescription"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:textSize="12sp"
Android:width="0dip" />
</LinearLayout>
<ImageView
Android:id="@+id/widget01"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/arrow_nxt"
Android:layout_gravity="center_vertical"
Android:paddingRight="5dip" />
</LinearLayout>
La seule réponse correcte à cette question est que vous devez définir une largeur appropriée pour les parents (dans ce cas, FILL_PARENT
, WRAP_CONTENT
) et utiliser Android:layout_weight=1
pour la vue de texte à emballer.
SingleLine
est activé par défaut, cela n'entraînera aucun changement.
Une variable width
définie sur 0px fonctionnera, mais ce n'est pas une bonne solution.
Quelques exemples (dans une table cette fois-ci), en utilisant XML:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent" Android:layout_height="fill_parent"
Android:orientation="vertical">
<TableLayout Android:layout_width="fill_parent"
Android:layout_height="wrap_content" Android:stretchColumns="*"
Android:id="@+id/tableLayout1">
<TableRow Android:id="@+id/tableRow1" Android:layout_width="fill_parent"
Android:layout_height="wrap_content">
<TextView Android:text="test1" Android:layout_width="fill_parent"
Android:layout_height="wrap_content" Android:layout_weight="0" />
<TextView Android:layout_weight="1"
Android:text="test2 very long text that needs to be wrapped properly using layout_weight property and ignoring singleline since that is set by default..."
Android:layout_width="fill_parent" Android:layout_height="wrap_content" />
</TableRow>
</TableLayout>
</LinearLayout>
Si vous voulez définir ceci dans le code, vous recherchez le poids de layout_weight comme troisième paramètre, comme dans cet exemple où il est défini sur 1:
row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
TextView label = new TextView(getApplicationContext());
label.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT, 1f));
Vous devez utiliser 2 paramètres:
Android:ellipsize="none"
: le texte n'est pas coupé sur la largeur de la vue texte
Android:scrollHorizontally="false"
le texte se termine sur autant de lignes que nécessaire
Il suffit de l'utiliser dans votre fichier XML.
Android:singleLine="false".
J'espère que ça va marcher.
Bonne chance!
Je ne pouvais obtenir aucune de ces solutions en utilisant un TableLayout>TableRow>TextView
. J'ai alors trouvé TableLayout.shrinkColumns="*"
. La seule autre solution qui a fonctionné a été de forcer TextView à layout_width:250px
etc., mais je n'aime pas forcer les largeurs de ce type.
Essayez quelque chose comme ceci si vous travaillez avec des tables.
<TableLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:shrinkColumns="*">
Notez que vous avez besoin de shrinkColumns="*"
Ceci est évidemment dans un <LinearLayout>
. Donc quelque chose comme <LinearLayout> <TableLayout> <TableRow> <TextView>
références:
http://code.google.com/p/Android/issues/detail?id=4000
J'espère que ça aide quelqu'un.
L'un de vos paramètres de présentation est incorrect dans votre code. Dans le premier TextView
Android:layout_width="wrap_content"
changer à
Android:layout_width="fill_parent"
Le texte qui dépasse la largeur de l'écran sera renvoyé à la ligne suivante et définit Android:singleline="false"
.
Définissez la hauteur de la vue texte Android:minHeight="some pixes"
ou Android:width="some pixels"
. Cela résoudra le problème.
Dans mon cas, supprimer le type d'entrée a fait l'affaire, j'utilisais Android: inputType = "textPostalAddress" car mon textview était collé sur une ligne et ne recouvrait pas, supprimant le problème résolu.
Je suis un débutant sur Android (et l'interface graphique), mais j'ai beaucoup d'expérience avec les logiciels. J'ai suivi quelques tutoriels, et voici ce que j'ai compris:
layout_width et layout_height sont des attributs de TextView. Ce sont des instructions sur la manière dont TextView doit se former, elles ne font pas référence à la façon de gérer le contenu dans TextView.
Si vous utilisez "fill_parent", vous dites que le TextView doit se modeler par rapport à sa vue parent, il doit le remplir.
Si vous utilisez "wrap_content", vous dites que vous devez ignorer la vue parent et laisser le contenu de TextView définir sa forme.
Je pense que c'est le point de confusion. "wrap_content" n'indique pas à TextView comment gérer son contenu (pour envelopper les lignes), il lui indique qu'il doit se conformer par rapport à son contenu. Dans ce cas, sans caractères de nouvelle ligne, il se forme de manière à ce que tout le texte soit sur une seule ligne (ce qui malheureusement déborde du parent).
Je pense que vous voulez qu'il remplisse le parent horizontalement et que son contenu soit enveloppé verticalement.
J'ai eu un problème similaire où mes deux TextViews à pondération horizontale n'ont pas enveloppé le texte. J'ai découvert par la suite que le problème était dû au fait que mon parent de viewparents avait wrap_content au lieu de match_parent.
Augmentez la hauteur, c'est-à-dire .. Android: height = "Une certaine taille", cela fonctionne très bien pour moi.
Même s'il s'agit d'un vieux fil, je voudrais partager mon expérience, car cela m'a aidé. Mon application fonctionnait correctement pour OS 2.0 et 4.0+, mais pour un téléphone HTC fonctionnant sous OS 3.x, le texte n'était pas enveloppé. Ce qui a fonctionné pour moi a été d'inclure ces deux balises.
Android:maxLines="100"
Android:scrollHorizontally="false"
Si vous éliminez l'un ou l'autre, cela ne fonctionnait pas uniquement pour le périphérique os 3.0. Le paramètre "ellipsize" a un effet neutre. Voici la balise textview complète ci-dessous
<TextView
Android:id="@+id/cell_description"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:paddingTop="5dp"
Android:maxLines="100"
Android:scrollHorizontally="false"
Android:textStyle="normal"
Android:textSize="11sp"
Android:textColor="@color/listcell_detail"/>
J'espère que cela aiderait quelqu'un.
J'ai passé des heures à comprendre que dans le texte que j'essayais d'afficher contenait un guillemet simple (dans string.xml), je l'ai donc échappé avec une barre oblique inversée et cela fonctionnait bien => la hauteur du TextView était correctement le texte enveloppant:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:paddingLeft="16dp"
Android:paddingRight="16dp"
Android:paddingTop="16dp"
tools:context=".MainActivity">
<TextView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:fontFamily="sans-serif-smallcaps"
Android:text="@string/instructions"
Android:textAlignment="center"
Android:textSize="18sp"
Android:textStyle="bold" />
<EditText
Android:id="@+id/keyword"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="@string/defaultKeyword"
Android:textSize="22sp"
/>
Je mets cet attribut:
Android:inputType="textMultiLine"
dans ma TextView et il a une ligne d'habillage et l'utilisateur peut "entrer" pour une nouvelle ligne.
=============================================== ==========
Lorsque vous arriverez à ce message, vous voudrez peut-être créer un Big TextView pouvant afficher plusieurs lignes. Ces attributs peuvent donc également être nécessaires.
Android:layout_height="Xdp" //where X is a number depends on how big Textview you want
Android:gravity="top" //in order to make your text start from the top of your TextView.
Je viens de supprimer Android:lines="1"
et d’ajouter Android:maxLines="2"
, le texte s’enroule automatiquement. Le problème était l'attribut Android:lines
. Cela fait en sorte que le texte soit pas arrive.
Je n'ai pas eu à utiliser maxEms
ou singleLine="false"
(API obsolète) pour résoudre ce problème.
Je sais que le problème est exact, mais dans mon cas, le problème était de définir la propriété textSize dans "dp" - je l’ai changée en "sp" et cela fonctionne bien.
J'ai utilisé Android:ems="23"
pour résoudre mon problème. Il suffit de remplacer 23 par la meilleure valeur dans votre cas.
<TextView
Android:id="@+id/msg"
Android:ems="23"
Android:text="ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab "
Android:textColor="@color/white"
Android:textStyle="bold"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"/>
vous devez utiliser Android:singleLine="false"
dans vos balises TextView
.
J'utilise la mise en page de contrainte principalement.
1) Android:layout_width="match_parent"
= essaye de s'étirer pour rencontrer les bords
2) Android:layout_width="wrap_content"
= uniquement basé sur le texte saisi, sans égard aux autres vues à proximité. par exemple, ajouter Android:textAlignment="center"
changera la forme du texte
3) Android:padding="12dp"
Android:layout_width="0dp"
Android:layout_weight="1"
Android:singleLine="false"
= Le texte se pliera pour s'adapter aux mises en page proches sans tenir compte du texte lui-même
Je pense que cela dépend de la combinaison particulière de dispositions dans votre affichage. Certains drapeaux peuvent être remplacés ou ignorés. J'ai un TabHost avec des onglets, chaque onglet est une liste de tables. Il s’agit donc d’un onglet de ListView, chaque ligne étant un TableLayout de TextView J'ai essayé les correctifs énumérés ci-dessus et aucun d'entre eux n'a fonctionné.
J'ai finalement réussi à ajouter quelques pixels à la hauteur du TextView pour résoudre ce problème.
Vous devez d’abord obtenir la hauteur de TextView. Ce n'est pas simple car c'est 0 avant que cela soit déjà peint.
Ajoutez ce code à onCreate:
mReceiveInfoTextView = (TextView) findViewById(R.id.receive_info_txt);
if (mReceiveInfoTextView != null) {
final ViewTreeObserver observer = mReceiveInfoTextView.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int height = mReceiveInfoTextView.getHeight();
int addHeight = getResources().getDimensionPixelSize(R.dimen.view_add_height);
mReceiveInfoTextView.setHeight(height + addHeight);
// Remove the listener if possible
ViewTreeObserver viewTreeObserver = mReceiveInfoTextView.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
viewTreeObserver.removeOnGlobalLayoutListener(this);
}
}
});
}
Vous devez ajouter cette ligne à dimens.xml
<dimen name="view_add_height">10dp</dimen>
J'espère que ça aide.
Dans mon cas, avec une imbrication TableRow > ScrollView > TextView
, j'ai résolu le problème en définissant Android:layout_width
sur fill_parent
sur TableRow
et sur wrap_content
sur ScrollView
et TextView
.
J'ai ajouté un\n au milieu de ma chaîne et ça avait l'air d'aller.