J'ai un horizontal LinearLayout
contenant un TextView
suivi d'un à Spinner
côté. Ceci LinearLayout
est gonflé dynamiquement plusieurs fois dans une verticale fixe LinearLayout
contenue 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 TextView
est coupée en deux. Cela se produit lorsque le texte dynamique est long et s'étend sur plus d'une ligne.
J'ai pu résoudre ce problème en ajoutant un rembourrage inférieur à l'horizontale LinearLayout
contenant le TextView
et 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>
la source
Réponses:
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
.TextView
etSpinner
ont 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:ou dans le code:
la source
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: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.
la source
@android:style/Widget.TextView
et ajoute les lignes suivantes:<item name="android:gravity">fill</item>
<item name="android:padding">1sp</item>
android:baselineAligned="false"
à votreLinearLayout
J'ai eu le même problème et j'ai trouvé que simplement ajouter
la dernière ligne de texte n'avait plus ses descendants coupés.
la source
J'ai ajouté un espace factice après le texte en ajoutant
J'ai essayé toutes les autres solutions, mais c'était la seule solution qui fonctionnait pour moi
la source
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.
la source
CheckBox
en même tempsLinearLayout
. Cela a résolu le problème.Lorsque cela se produit, vous devez vous assurer que le
TextView
ne devient pas plus grand que son conteneur -Si a
TextView
est défini surwrap_content
et que son conteneur (ou un conteneur ancêtre) ne laisse pas de place pour que leTextView
se développe, il peut être occlus.Si ce n'est pas le cas, il est également possible que le
onMeasure()
deTextView
ne 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 votreTextView
afin 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:
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.
la source
Ma solution était proche de celle acceptée, mais j'ai dû la changer en
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
à
la source
J'ai trouvé une solution différente en étendant TextView et en ajoutant une classe personnalisée comme celle-ci:
la source
this.setEllipsize(TextUtils.TruncateAt.END);
l'instruction if ci-dessus et supprimezandroid:ellipsize="end"
du XML qui, pour une raison quelconque, le casse.essayez de supprimer Android: paddingBottom = "20dp"
de
la source
getViewTreeObserver().addOnGlobalLayoutListener
ne fonctionne pas dans une vue recycleur. Si vous utilisez un recycleur, utilisezView.addOnLayoutChangeListener
:J'ai trouvé que l'ellipse que j'avais définie
textView
dans 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.la source
Si vous rencontrez ce problème et que vous vous trouvez
TextView
dans unRelativeLayout
, essayez de changer leRelativeLayout
pour aLinearLayout
.Cela a résolu le problème pour moi
la source
Vous pouvez utiliser un écouteur de disposition globale pour un TextView dans n'importe quel type de ViewGroup.
Vous pouvez en savoir plus ici
la source
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:
Et dans une activité:
la source
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.
la source
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.
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.
la source
Je sais qu'il est trop tard, mais c'est un travail comme du charme pour moi. ajoutez ce code à votre
textview
la source
Ajoutez un remplissage au bas de la vue de texte:
la source
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:
Je le pense car dans le monent d'appel scrollTo () en service, la mise à jour de TextView n'est pas prête.
la source